竞赛练习平台(全天候可用):acm.dingbacode.com
参考文章链接:https://blog.csdn.net/m0_52138323/article/details/112715680
A+B for Input-Output Practice (I)
(忽略沙雕的自言自语)
计算a+b的和,我打眼一瞧就觉得此题so easy,简直是瞧不起我叶某人,我chuachuachua就敲完了代码,提交!!!
代码:
#include<stdio.h>
int main()
{
int a,b;
int i=0;
while(i!=-1)
{
scanf("%d%d",&a,&b);
printf("%d\n",a+b);
i++;
}
}
1.Compilation Error(编译错误),原因应该是我用C语言编写代码,但提交的语言选择了JAVA
2.Time Limit Exceeded(超时),超时原因是循环终止条件出错/过于宽泛。删除循环,修改代码为:
#include<stdio.h>
int main()
{
int a,b;
scanf("%d%d",&a,&b);
printf("%d\n",a+b);
}
3.Wrong Answer(结果出错),看来循环是必须的,修改代码为:
#include<stdio.h>
int main()
{
int a,b;
while(scanf("%d%d",&a,&b)!=EOF)
{
printf("%d\n",a+b);
}
}
转载自:https://blog.csdn.net/MTOY_320/article/details/78363375?locationNum=7&fps=1
4.Time Limit Exceeded(超时),依旧超时,t添加return 0,终止main函数。修改代码为:
#include<stdio.h>
int main()
{
int a,b;
while(scanf("%d%d",&a,&b)!=EOF)
{
printf("%d\n",a+b);
}
return 0;
}
5.我尝试在1的基础上直接添加return 0,但是还是超时。
我觉得本小节中的知识点有:
(1)细心,当用c编译时,检查不要用其他语言提交
(2)c和g++的区别,查了一下,没有找到比较笼统的说法,为了不误导大家,建议自查
(3)程序超时有多种原因,其中循环条件出错的解决方法是重点
关于 Process to end of file:计算机操作系统要以某种方式判断文件的开始和结束,在C语言中检测文件结尾的一种方法是:在文件结尾放一个特殊的字符来标记文件结尾。通常,在C语言中,用getchar()或scanf()函数读取文件检测到文件结尾时返回一个特殊的值,即EOF(end of file的缩写)。
关于 EOF:
EOF是一个值,标志着检测到文件结尾,并不是在文件中可以找到的符号。
EOF在stdio.h中已经被定义过,不需要重新定义。
一般情况下EOF的值为-1,因为getchar()函数的返回值通常在0—127之间(对应标准字符集),当系统所识别的范围超过标准字符集,则函数的返回值可能在0—255之间,而-1则无论那种情况都不会被检测到,该值作为文件结尾恰到好处;
关于多组数据的输入while((scanf())!=EOF):
while(scanf()!=EOF),代表的意思是可持续输入,直到scanf返回的值是-1时才会停止输入,实现了多组数据的输入。
我们也可以在while里面加上一些约束条件,这样的话输入在特定的条件下就会停止,我们也可以通过输入完成后按Ctrl+z(好多微型计算机都把Ctrl+z识别为文件结尾的信号),可以强行停止输入。
因为scanf函数需要有一个返回值, 当你在持续输入时,scanf就永远不会返回-1,当你通过某种方式,比如按下ctrl+z停止输入后,scanf就会返回-1,此时等价于EOF,则这个循环就跳出停止。
(4)函数中return 0的用法与作用,我不太理解,所以没有写在这里。
补充JAVA代码:
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
while(scanner.hasNextInt()){
int a=scanner.nextInt();
int b=scanner.nextInt();
int m=a+b;
System.out.println(m);
}
}
}