赛码网常见接受参数的方法

来源:互联网 发布:gis数据挖掘前景 编辑:程序博客网 时间:2024/06/05 15:53

            前段时间在赛码网上在线笔试,被其编译器各种坑,明明在本地上可以测出数据,但一放上去就是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容器。希望能帮助大家,如果还有其他建议和方法,欢迎留言微笑

0 0
原创粉丝点击