OJ 输入问题

来源:互联网 发布:网络历史类小说排行榜 编辑:程序博客网 时间:2024/05/10 04:23



1. 最简单的输入


Description  计算 a+b    Input  两个整数 a,b    Output  a+b的值      Sample Input  1 2    Sample Output  3  

C
#include <stdio.h>  int main()  {      int a,b;      scanf("%d %d",&a, &b);      printf("%d\n",a+b);  //对其他题目,换成要求的复杂处理与输出      return 0;  }  

C++:
#include <iostream>  using namespace std;  int  main()  {      int a,b;      cin >> a >> b;      cout << a+b << endl;   //对其他题目,换成要求的复杂处理与输出      return 0;  }  




2. 一次运行,要输入多组数据,直到读至输入文件末尾(EOF)为止


Description  计算 a + b    Input  多组由两个整数(a和b)构成的输入,a和b之间用空格隔开,每组输入单独占一行     Output  每组的两个整数(a和b)求和并输出,每组的求和结果独占一行    Sample Input  1 5  10 20  400 516    Sample Output  6  30  916  


C:
#include <stdio.h>  int main()   {      int a,b;      while(scanf("%d %d",&a, &b) != EOF) // 输入结束时,scanf函数返回值为EOF(-1),即没有数据输入时会退出while循环      {          printf("%d\n",a+b);      }      return 0;   }  


  说明:scanf函数返回值就是读出的变量个数,如果一个都没有,则返回值是-1。EOF是一个预定义的常量,等于-1。 


C++:
#include <iostream>   using namespace std;  int main()  {      int a,b;      while(cin >> a >> b)      {          cout << a+b << endl;      }      return 0;  }   


  说明:当读到输入结束时,cin >> a >> b返回 0,循环也结束


3. 一次运行,要输入多组数据,组数由第一个输入数据决定(在开始的时候输入一个N,接下来是N组数据)


Description  计算 a + b    Input  第一行是数据的组数N,从第二行是N组由两个整数(a和b)构成的输入,a和b之间用空格隔开,每组输入单独占一行     Output  每组的两个整数(a和b)求和并输出,每组的求和结果独占一行    Sample Input  2  1 5  10 20    Sample Output  6  30  



C:
#include<stdio.h>  int main()  {      int n,i;      int a,b;      scanf("%d",&n);      for(i=0;i<n;i++)      {          scanf("%d%d",&a,&b);          printf("%d\n",a+b);      }      return 0;  }  



C++:
#include <iostream>  using namespace std;  int main() {      int a, b, n;      cin >> n;      for(i=0;i<n;i++)      {          cin >> a >> b;          cout << a + b << endl;      }      return 0;  }  






4.  输入不说明有多少组数据,但以某个特殊输入为结束标志。平时做题中常见诸如“输入学生成绩,以-1结束”,没有学生得-1分的,这个结束数据可以要得。


Description  计算 a + b    Input  多组由两个整数(a和b)构成的输入,a和b之间用空格隔开,每组输入单独占一行。当输入为 0 0 时,输入结束。    Output  每组的两个整数(a和b)求和并输出,每组的求和结果独占一行。    Sample Input  1 5  10 20  0 0    Sample Output  6  30  



C:
#include <stdio.h>  int main()  {      int a,b;      while(scanf("%d %d",&a, &b) &&(a||b))      {          printf("%d\n",a+b);      }      return 0;  }  




C++:
#include<iostream>  using namespace std;  int main()  {      int a ,b;      while(cin>>a>>b&&(a||b))      {          cout<<a+b<<endl;      }      return 0;  }  


5. 利用文件重定向提高调试效率
  编程得到正确结果前,往往需要多次运行程序,每次运行都需要花费不少的时间从键盘输入数据。每次输入的数据都是相同的时,会给人的心理带来不爽的感觉,并造成时间上的浪费。无论平时练习还是ACM竞赛实战,这些都是可以避免的。方法是,运用重定向。
  用下面的形式调用函数freopen()会将标准输入stdin重定向到文件input.txt(这个名字可以自己定义)。

  重定向后,原先从键盘(标准输入的默认设备)接受的输入,将统统从文件读取input.txt读取,这就是重定向。


C:
#include<stdio.h>  int main()  {      freopen("input.txt","r",stdin);  //只加这一句输入将被重定向到文件input.txt      int a,b;      scanf("%d%d",&a,&b);      printf("%d\n",a+b);      return 0;  }  



C++:
#include<iostream>  #include<fstream>  using namespace std;  int main()  {      ifstream fin("input.txt");  //只加这一句输入将被重定向到文件input.txt      int a,b;      fin>>a>>b;      cout<<a+b<<endl;      fin.close(); //记得关掉    return 0;  }  



  
于是,在运行程序前,将本该由键盘输入的数据,写到文件input.txt中。而在运行程序时,数据将不再需要人去输入。那个快,很享受。
  需要注意的是,调试通过的程序,千万不要直接提交到OJ平台上去。如果竞赛中这样做了,罚你的20分钟不要算到我的头上。提交的程序要把输入重定向的一行删除,这样才算是符合要求的,可以获得AC的程序。
  除了删除那一行,还有一种简单的做法是,提交前将这一行前加上注释符"//",效果是一样的。


文章来源:
               ACM题目中输入数据的处理(C++版),见:http://blog.csdn.net/sxhelijian/article/details/8978850
               ACM题目中输入数据的处理(C语言版)见:http://blog.csdn.net/sxhelijian/article/details/8978794

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 会认字不会写字怎么办 孩子不认识的字怎么办 小孩暑假没人带怎么办 放暑假了孩子怎么办 暑假孩子没人带怎么办 幼儿园孩子不愿意写字怎么办 孩子写作业潦草怎么办 写字写到手痛怎么办 孩子字体写不好怎么办 子写的不好怎么办 字老是写不好怎么办 一年级孩子认字少怎么办 26岁有眼袋怎么办 35岁有眼袋怎么办 晚上睡觉时间短怎么办 小孩说爸爸死了怎么办 扫地机器人坏了怎么办 孩子思维逻辑差怎么办 喜欢动手打别人怎么办 小孩写作文困难怎么办 2岁儿子打人怎么办 三岁宝宝爱咬人怎么办 幼儿园小孩咬人怎么办 孩子不会动手打人怎么办 小孩子隔奶奶涨怎么办 小孩子戒奶奶涨怎么办 孩子总打别人怎么办 儿童在学校打人怎么办 两岁儿童打人怎么办 孩子哭闹要东西怎么办 高中孩子爱打架怎么办 宝宝性格太弱怎么办 宝宝太老实了怎么办 一岁多宝宝爱打人怎么办 一岁半宝宝爱打人怎么办 两岁半宝宝喜欢打人怎么办 孩子总是挨欺负怎么办 一年级孩子爱打架怎么办 孩子没规矩家长怎么办 小朋友在幼儿园打人怎么办 幼儿园小朋友喜欢打人怎么办