多组输入输出

您所在的位置:网站首页 C语言多组输入一起输出 多组输入输出

多组输入输出

2023-09-27 10:02| 来源: 网络整理| 查看: 265

首先说一下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 7

3. 每个输出前加上一些标记, 标志第几组数据,例如:

#include int main(){ int T; int a,b; scanf("%d",&T); int i = 0; for(i = 1; i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3