賽碼網常見接受引數的方法
前段時間在賽碼網上線上筆試,被其編譯器各種坑,明明在本地上可以測出資料,但一放上去就是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*
)都可以在賽碼網上進行接收。
還有一種就是它說給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容器。希望能幫助大家,如果還有其他建議和方法,歡迎留言