1. 程式人生 > >賽碼網常見接受引數的方法

賽碼網常見接受引數的方法

            前段時間在賽碼網上線上筆試,被其編譯器各種坑,明明在本地上可以測出資料,但一放上去就是0%,如果本地測得資料是可以的話,說明邏輯基本沒問題,那很明顯就是在接收引數時出現問題了,經過對賽碼網上的程式設計題的各種常見的傳參形式,總結了以下一些基本的接受引數的方法,希望能幫助各位在再筆試時不會被坑:

一行的引數就不多說了,用cin或scanf;主要是多行引數的接收和陣列的接收;

關於陣列接收有時候會說用空格或,隔開什麼的,基本上就這兩種方式,其實你只要按正常方式接收就好,如:

12345

1,2,3,4,5,

1 2 3 4 5

統一用C接收:

for(i=0;i<n;++i)

{

  scanf("%d",&arr[i]);

}

用C++接收:

for(i=0;i<n;++i)

{

  cin>>arr[i];

}

(這裡只是說的陣列,如果人家給了你固定格式,像日期之類的1994-2-9,那你就乖乖地按scanf("%d-%d-%d",a,b,c)來)

但一般它會讓你接收陣列大小,如:

5

12345

之類的多行資料接收。

其實關於多行資料我建議就用STL中的容器接收,一次性接收完畢,然後稍加處理就好,如上面的例子可如下接收:

vector<int> arr;

int n,size;

while(cin>>n)

{

    arr.push_back(n);

}

size=arr[0];

arr.erase(arr.begin());

這樣你的陣列大小在size中,陣列就在arr裡,而且容器用起來很方便還很快,如果是二維的話也可以這樣接收,只是你在用的時候注意下取值方式就好了,當然主要還是根據題來選擇的,如果是C的話,賽碼網的編譯器也是在支援這樣寫的:

int n;

scanf("%d",&n);

int a[n];

for(i=0;i<n;++i)

{

  scanf("%d",&arr[i]);

}

可是嚴格來說是不行的,所以建議儘量用C++來接收引數;

       對於字串和字元陣列的接收除了scanf外,還有String類,char* 

fgets(char*string,int size,FILE*stream) ,cin中的getline函式(用法:istream& getline (char* s, streamsize n );
)都可以在賽碼網上進行接收。

      還有一種就是它說給n組測試資料,求輸出結果,意思就是讓你在n次迴圈下,每接收一組資料,處理一次,如:

輸入:

3

1 2

3 4

5 6

輸出:

1 2

3 4 

5 6

大體如下:

int n,a,b;

cin>>n;

while(n--)

{

  cin>>a>>b;

  cout<<a<<b<<endl;

}

以上就是個人總結出來的大部分引數接收方法,根據題意配合著使用應該可以應付大部分程式設計題,個人建議:儘量使用C++,儘量用STL容器。希望能幫助大家,如果還有其他建議和方法,歡迎留言微笑