1 引言
在刷题过程中,为了提高效率,我们往往一次性输入多组测试数据,得到多组测试结果
2 代码实现
注:以C/C++为例(笔者暂时学了这么多Orz…)
2.1 每行个数确定
InputSample01:
98 72
-40 88
-62 -95
C实现:
while(scanf("%d %d",&x,&y)==2){
}
C++实现:
while(cin>>x>>y){
}
InputSample02:
98#72
-40#88
-62#-95
C实现:
while(scanf("%d%c%d",&x,&c,&y)==3){
}
C++实现:
while(cin>>x>>c>>y){
}
2.2 每行个数不确定
2.2.1 给出每行个数
InputSample03:
2 98 72
1 -40
C实现:
while(scanf("%d",&n)==1){
int a[n];
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
}
C++实现:
while(cin>>n){
int a[n];
for(int i=0;i<n;i++)
cin>>a[i];
}
2.2.2 未给出每行个数
2.2.2.1 一般情况
InputSample04:
98 72 -40 88
-62 -95
C实现:
int GetData(int *p)
{
int n, flag=1;
char c;
for(n=0; flag && scanf("%d%c", p+n, &c)==2; n++)
if(c=='\n') flag=0;
return n;
}
int main()
{
const int N = 1024;
int array[N], n, k=0;
while((n=GetData(array))!=0){
//具体表达式
}
return 0;
}
C++实现:
int GetData(int *p)
{
int n=0;
char c;
cin>>p[n];
while((c=getchar())!='\n'){
cin>>p[++n];
}
return n;
}
int main()
{
const int N = 1024;
int array[N], n, k=0;
while((n=GetData(array))!=0){
//具体表达式
}
return 0;
}
2.2.2.2 特殊情况
InputSample04:
(98, 72, -40, 88)
(-62, -95)
找规律
一般来说,要取出来的数据具有一定的规律,如上面的例子,在‘(’和‘ ’(空格)后必定是数字