• 【ACM】输入输出问题(2)


    输入

    先看一道比较简单的题目:

    题目内容

       已知正方形的边长,试编程求出其面积。

    输入描述

       输入不超过50个正整数的数据n (1<=n<=10000),每个正整数间以空格隔开。

    输出描述

       每次读入一个正整数,便输出其正方形的面积数,输出每个面积后再回车。  

    输入样例

       1 3 5 7

    输出样例

       1

       9

       25

       49

    输入问题一:针对输入的个数不定情况,以EOF或-1作为输入的结束:

    C语言:scanf 返回值描述输入的个数,如果没有输入则返回 -1  EOF其实也是-1.

    1. #include
    2. int main(void)
    3. {
    4. int a;
    5. while(scanf("%d",&a)==1)
    6. printf("%d\n",a*a);
    7. return 0;
    8. }

    两个输入则判断是否等于2,或者用:while (scanf("%d", &n) != EOF)  也可以(这个更加通用)

    C++,通过cin的输入状态来判断:

    1. #include
    2. using namespace std;
    3. int main(void)
    4. {
    5. int a;
    6. while(cin>>a)
    7. cout<
    8. return 0;
    9. }

    两个输入则:  while(cin>>a>>b)  之类的。

    输入问题二:输入一开始就会说有N个,然后紧跟N个

    Problem Description

         Your task is to Calculate a + b.

    Input

         Input contains an integer N in the first line, and then N lines follow. Each line consists of a pair of integers a and b, separated by a space, one pair of integers per line.

    Output

          For each pair of input integers a and b you should output the sum of a and b in one line, and with one line of output for each line in input.

    Sample input:

         2

        1 5

         10 20

    Sample output:

         6

                30 

    杭电Problem - 1090

    这类问题比较简单,先输入n,循环n次输入,每次输入计算直接输出 

    1. #include <stdio.h>
    2. int main()
    3. {
    4. int n,i,a,b;
    5. scanf("%d",&n);
    6. for(i=0;i<n;i++)
    7. {
    8. scanf("%d %d",&a, &b);
    9. printf("%d\n",a+b); //直接输出
    10. }
    11. return 0;
    12. }

    切记,不要误解为全部输入后再输出!

    输入问题三:不指明输入多少个,但说明以什么结束输入

     题目类似1090略,不同是以 0 0 结束输入。杭电:Problem - 1091

    解决方法,可以参考第一类输入问题,补上判断条件即可:

    while(scanf("%d%d",&a, &b) &&(a!=0 || b!=0)) 

    值得注意:逻辑为:(a!=0 || b!=0)  a 和  b 不同时为0! 很容易写成 (a!=0 && b!=0)

    输入问题四:输入一串文本

    C语言: 

    1. int main()
    2. {
    3. char buff[256];
    4. scanf("%s",buff);
    5. //分割字符串等等
    6. return 0;
    7. }

    遇到空格问题用gets : gets(buff);

    C++:

    1. int main()
    2. {
    3. char buff[256];
    4. cin>>buff;
    5. //分割字符串等等
    6. return 0;
    7. }

    遇到空格问题用: cin.getline(buff,256);  读取一行,第二个参数表明接收的字符最大长度。

    如果使用string 则可以用以下代码完成输入(包括空格):

    1. #include
    2. #include
    3. using namespace std;
    4. int main()
    5. {
    6. string s;
    7. getline(cin,s);
    8. //分割字符串等等
    9. return 0;
    10. }

    单个字符输入用getchar。

    输出

    相比输入问题,输出比较容易解决。

    1、多个输入情况下,都是输入一个,输出一个结构,不要误解成输入完毕后再一次输出;

    2、认真审题,有些题目需要多一个空行,比如:杭电HDOJ_1095

    Problem - 1095

    指明每次输出后,多一个空行。 

  • 相关阅读:
    PHP字符串函数的解析
    容器基础--基本概念入门
    境外服务器停机:原因、影响以及如何预防
    从0到1学SpringCloud——13 gateway RouteLocator配置路由规则
    【Flink】事务型Sink连接器、kafka连接器、写入到redis、mysql
    VS编译.cu文件源文件无法打开matrix.h和mex.h问题
    面向对象编程之类方法@classmethod
    fail-safe 机制与 fail-fast 机制分别有什么作用
    SVG: 可伸缩的矢量图形
    DevOps全面综述:从概念到实践
  • 原文地址:https://blog.csdn.net/yixiaobo2001/article/details/127647339