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

输入

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

题目内容

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

输入描述

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

输出描述

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

输入样例

   1 3 5 7

输出样例

   1

   9

   25

   49

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

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

#include <stdio.h>
int main(void)
{
	int a;
	while(scanf("%d",&a)==1)
		printf("%d\n",a*a);
	return 0;
}

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

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

#include <iostream>
using namespace std;
int main(void)
{
    int a;
    while(cin>>a)
       cout<<a*a<<endl;
    return 0;
}

两个输入则:  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次输入,每次输入计算直接输出 

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

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

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

 题目类似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语言: 

int main()
{
	char buff[256];
	scanf("%s",buff);
	//分割字符串等等
    return 0;
}

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

C++:

int main()
{
	char buff[256];
    cin>>buff;
	//分割字符串等等	
    return 0;
}

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

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

#include <iostream>
#include <string>
using namespace std;
int main()
{
	string s;	
	getline(cin,s);
	//分割字符串等等	
    return 0;
}

单个字符输入用getchar。

输出

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

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

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

Problem - 1095

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

易老师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值