• 【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

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

  • 相关阅读:
    几行代码轻松实现flutter 调用百度地图
    c语言-输入输出详解
    C++基础(2022.9.3)
    用于割草机器人,商用服务型机器人的陀螺仪
    Django之csrf与auth模块操作
    ajax之Content-Type示例
    git常用命令总结
    pytorch代码实现之分布偏移卷积DSConv
    OKK---生物信息研究之ClinVar的下载,Annovar的下载和使用
    Golang 调度器 GPM模型
  • 原文地址:https://blog.csdn.net/yixiaobo2001/article/details/127647339