多组输入输出 |
您所在的位置:网站首页 › C语言多组输入一起输出 › 多组输入输出 |
首先说一下OJ平台的判题机制,OJ判题是黑盒测试,它并不关心程序的内容,只用程序的输出结果来判断是否正确。 OJ后台有两个文件,一个是输入文件,一个是输出文件。 你将代码提交上去后,OJ会运行你的代码,并将输入文件中的数据输入,如果你的代码的运行结果和输出文件完全一致,那么该代码通过,AC。 以 多组输入输出中 a + b 为例。 如果你的代码每组数据运行的结果和1.out完全一致,那么这道题就会判为AC。(注意只看输出内容)
下面说一下平常题目的输入输出格式: 常见的输入格式:1.给定一个整数T, 然后接着输入T组数据 格式如下: #include int main(){ int T; int a,b; scanf("%d",&T); while(T--){ scanf("%d%d",&a,&b); int c = a + b; printf("%d\n",c) ; } return 0; }输入: 3 1 2 2 2 3 4输出: 3 4 7
2.循环输入 (1):持续循环输入直到输入文件结尾(EOF) #include int main(){ int T; int a,b; while(scanf("%d%d",&a,&b)!=EOF){ printf("%d\n",a+b); } return 0; }输入: 1 2 2 2 3 4输出: 3 4 7(2)假设直到a,b都等于-1,结束循环. #include int main(){ int T; int a,b; while(scanf("%d%d",&a,&b)&&(a!=-1||b!=-1)){ printf("%d\n",a+b); } return 0; }输入: 1 2 2 2 3 4 -1 -1输出: 3 4 7(3)没有明确说明要输入多少个数据,需要在输入完数据后手动按 Ctrl + Z 强制结束输入 Ctrl + Z相当于是 EOF 所以退出循环 #include int main(){ int a,sum = 0; while(scanf("%d",&a)!=EOF){ sum+=a; } printf("%d\n",sum); return 0; }输入: 1 2 3 4 5 6 7 (按Ctrl + Z然后回车,强制结束循环)输出: 28(4) 如果题目要求输入多组数据,每组数据有多个数据,则先用一个循环控制输入多少组数据,然后在内部在用一个循环输入数据。 例如:输入T组数据,每组数组包含一个整数n, 随后给数组存入n个值。 int T; scanf("%d",&T); int a[10]; while(T--){ int n; scanf("%d",&n); int i; for(i = 0; i < n; i++){ scanf("%d",&a[i]); } }(5)特别的对于一些字符串相关的题,题目有时候会给出一行字符,这时候不能仅用'\n'来控制循环结束,一定要加上!=EOF 下面给出字符串常用的输入格式: #include int main() { char ch; while((ch=getchar())!=EOF) { if(ch=='\n') break; ...... } return 0; } 总结: 多组输入中循环控制条件分两种。1.没有明确什么时候结束输入。 则采用while(scanf(...)!=EOF) 加!=EOF 是因为没有明确的循环结束条件时为了避免出现死循环,只能通过到达输入文件结尾的时候来结束循环,因为到达文件结尾后没有东西可供输入函数读取了,所以此时输入函数 如 scanf(), 就会返回 -1。 EOF在C语言的定义中就是-1 所当返回值等于EOF时,循环结束。 2.以特定元素作为结束标志,结束输入 如(2) 中 a和b都为-1时结束循环, 或者 遇到0时结束循环 则只需要加上给定的判断条件就行,视具体情况而定。 如 while(scanf("%d",&a,&b)&&(a!=-1||b!=-1)) 常见的输出格式: 1.有若干行,每行只包含一组正确答案 上述代码都是这种情况,也就说输出一组答案后跟着输出换行; 如: #include int main(){ int T; int a,b; while(scanf("%d%d",&a,&b)!=EOF){ printf("%d\n",a+b); } return 0; }
2.所有答案均为一行,每个答案之间只有一个空格,且行末没有空格 #include int main(){ int T; int a[10]; scanf("%d",&T); for(int i = 0; i < T; i++){ scanf("%d",&a[i]); } sort(a,a+T); for(int i = 0; i < T; i++) i ? printf(" %d",c) : printf("%d",c); // 三目运算符 相当于 if(i!=0) printf(" %d",c); // else printf("%d",c); return 0; }输入: 3 1 2 2 2 3 4输出: 3 4 73. 每个输出前加上一些标记, 标志第几组数据,例如: #include int main(){ int T; int a,b; scanf("%d",&T); int i = 0; for(i = 1; i |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |