1078: a+b(多实例测试1)
题目描述
计算A+B
输入
输入第1行为一个整数n(1≤n≤10),代表测试的组数。
下面有n组测试数据,每组1行,为2个整数,为A, B。
输出
对每行输入,输出A+B的值,单独占一行。
样例输入
2
1 2
3 4
样例输出
3
7
提示
此类多实例测试解决方案:
scanf(“%d”,&n);
for(i=1;i<=n;i++)
{
//读入、处理一组测试实例
}
#include <stdio.h>
int main()
{
int i, n, a, b;
scanf("%d", &n);
for (i = 1; i <= n; i++)
{
scanf("%d %d", &a, &b);
printf("%d\n", a + b); //一定要加 \n
}
return 0;
}
1079: a+b(多实例测试2)
题目描述
计算A+B
输入
输入数据有多组。
每组一行,为整数A, B。
输出
对每行输入,输出A+B的值,单独占一行。
样例输入
1 2
3 4
样例输出
3
7
提示
此类多实例测试解决方案:
while(scanf(“%d%d”,&a,&b)!=EOF)
{
//读入一组测试数据
//处理
//输出结果
}
注:EOF是宏定义常量-1,scanf函数遇到文件结束标志函数返回值是-1,键盘输入时,ctrl+z表示输入结束
例如:
while(scanf(“%d%d”,&a,&b)!=EOF)
printf(“%d\n”,a+b);
#include <stdio.h>
int main()
{
int a,b;
while(scanf("%d%d",&a,&b) != EOF){
printf("%d\n",a+b);
}
return 0;
}
1080: a+b(多实例测试3)
题目描述
计算A+B
输入
输入数据有多组。
每组一行,为两个整数A, B。输入0 0表示输入结束,该组输入不用处理。
输出
对每行输入,输出A+B的值,单独占一行。
样例输入
1 2
0 0
样例输出
3
提示
输入0 0结束,本题可以在循环条件中读取键盘输入并同时进行判断:
while(scanf(“%d%d”,&a,&b), a!=0||b!=0)
printf(“%d\n”,a+b);
#include <stdio.h>
int main()
{
int a,b;
while(scanf("%d%d",&a,&b),a!=0||b!=0){
printf("%d\n",a+b);
}
return 0;
}
1081: n个数求和 (多实例测试)
题目描述
求n个整数的和。
输入
输入第一行是一个整数T,表示有T组测试实例;
每组输入包括两行:
第一行一个数n表示接下来会有n个整数;
第二行空格隔开的n个数。
输出
对于每组输入,在一行输出n个数的和(保证和不会超出int类型的范围)!
样例输入
2
3
1 2 3
4
-1 0 -19 22
样例输出
6
2
提示
初做多实例测试,注意累加和变量赋初值的位置。
#include<stdio.h>
int main()
{
int t, n, x, sum;
scanf("%d", &t);
for (int i = 1; i <= t; i++) //表示有t组测试实例
{
sum = 0; //每组测试实例开始前,都要重新初始化sum为0
scanf("%d", &n);
for (int j = 1; j <= n; j++)
{
scanf("%d", &x);
sum += x;
}//输入的n个数进行相加求和
printf("%d\n", sum);
}
return 0;
}
1082: 敲7(多实例测试)
题目描述
输出7和7的倍数,还有包含7的数字例如(17,27,37…70,71,72,73…)
输入
首先输入一个整数t,表示有t组数据。
然后有t行,每行一个整数N。(N不大于30000)
输出
对于每组数据 ,输出从小到大排列的不大于N的与7有关的数字。每组数据占一行,每个数字后面有一个空格;
样例输入
2
20
30
样例输出
7 14 17
7 14 17 21 27 28
#include<stdio.h>
int main()
{
int t,N;
scanf("%d",&t);
for(int i=0;i<t;i++){
scanf("%d",&N);
for(int j=7;j<=N;j++){
if(j%7==0) //7的倍数
printf("%d ",j);
else if(j%10==7 || j/10%10==7 || j/100%10==7 || j/1000%10==7) //含7的数字
printf("%d ",j);
}
printf("\n");
}
return 0;
}
1083: 数值统计(多实例测试)
题目描述
统计给定的n个数中,负数、零和正数的个数
输入
输入数据有多组,每组占一行,每行的第一个数是整数n(n<100),表示需要统计的数值的个数,然后是n个实数;如果n=0,则表示输入结束,该行不做处理。
输出
对于每组输入数据,输出一行a,b和c,分别表示给定的数据中负数、零和正数的个数。
样例输入
6 0 1 2 3 -1 0
5 1 2 3 4 0.5
0
样例输出
1 2 3
0 0 5
#include<stdio.h>
int main()
{
int n,i;
double a;
while(scanf("%d",&n),n!=0){
//求每一组数的正数、负数、零的个数,初始值都要置为0。不能写在while语句的外面
int zero=0,positive=0,negative=0;
for(i=0;i<n;i++){
scanf("%lf",&a);
if(a<0)
negative++;
else if(a>0)
positive++;
else
zero++;
}
printf("%d %d %d\n",negative,zero,positive);
}
return 0;
}
1084: 计算两点间的距离(多实例测试)
题目描述
输入两点坐标(X1,Y1),(X2,Y2),计算并输出两点间的距离。
输入
输入数据有多组,每组占一行,由4个实数组成,分别表示x1,y1,x2,y2,数据之间用空格隔开。
输出
对于每组输入数据,输出一行,结果保留两位小数。
样例输入
0 0 0 1
0 1 1 0
样例输出
1.00
1.41
#include<stdio.h>
#include<math.h>
int main()
{
double x1,x2,y1,y2;
double dist=0;
while(scanf("%lf %lf %lf %lf",&x1,&y1,&x2,&y2) != EOF){
dist=sqrt(pow((x1-x2),2)+pow((y1-y2),2));
// dist=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)); 二选一
printf("%.2f\n",dist);
}
return 0;
}
1085: 求奇数的乘积(多实例测试)
题目描述
给你n个整数,求他们中所有奇数的乘积
输入
输入数据包含多个测试实例,每个测试实例占一行,每行的第一个数为n,表示本组数据一共有n个,接着是n个整数,你可以假设每组数据必定至少存在一个奇数。
输出
输出每组数中的所有奇数的乘积,对于测试实例,输出一行。
样例输入
3 1 2 3
4 2 3 4 5
样例输出
3
15
#include<stdio.h>
int main()
{
int n,a,ji; //ji是乘积
while(scanf("%d",&n) != EOF){
ji=1;
for(int i=0;i<n;i++){
scanf("%d",&a);
if(a%2!=0)
ji=ji*a;
}
printf("%d\n",ji);
}
return 0;
}
1086: ASCII码排序(多实例测试)
题目描述
输入三个字符后,按各字符的ASCII码从小到大的顺序输出这三个字符。
输入
输入数据有多组,每组占一行,由三个字符组成,之间无空格。
输出
对于每组输入数据,输出一行,字符中间用一个空格分开。
样例输入
qwe
ads
xzc
样例输出
e q w
a d s
c x z
提示
注意:scanf(“%c”,&ch)格式读字符时,所有字符都是有效输入,如回车符、空格符等,所以每行读取字符之后要处理最后的回车符。
#include<stdio.h>
int main()
{
char ch1,ch2,ch3;
while(scanf("%c%c%c\n",&ch1,&ch2,&ch3) != EOF){ //输入也要有换行符
//输入只有在读到这个换行符的时候才会进行下一次输入
if(ch1>ch2){
char t=ch2;
ch2=ch1;
ch1=t;
}
if(ch1>ch3){
char t=ch3;
ch3=ch1;
ch1=t;
}
if(ch2>ch3){
char t=ch3;
ch3=ch2;
ch2=t;
}
printf("%c %c %c\n",ch1,ch2,ch3);
}
return 0;
}
scanf时如果不写 ‘\n’ ,那么在键盘输入字符时,手动输入的换行符会被当做一个字符。
或者 :
while(scanf("%c%c%c\n",&ch1,&ch2,&ch3) != EOF){
getchar(); //利用getchar来吸收掉换行符
.....
}
1087: 获取出生日期(多实例测试)
题目描述
输入某人的18位身份证号,输出其出生日期。
输入
多实例测试。首先输入一个整数n,表示测试实例的个数,然后是n行,每行是一个18位身份证号。
输出
对于输入的每个身份证号,输出一行,即其对应的出生日期,输出格式为:yyyy-mm-dd。
样例输入
3
410106199411178657
410104198202095479
410122197911218097
样例输出
1994-11-17
1982-02-09
1979-11-21
提示
scanf()函数中,可用%md指定读取位数。
#include <stdio.h>
int main()
{
int n, x, year, month, day;
scanf("%d", &n);
while (n--)
{
scanf("%*6d%4d%2d%2d%*d",&year,&month,&day); //%*6d表示不读取输入的前六位数
printf("%4d-%02d-%02d\n",year,month,day); //%0md表示不足m位的整型变量用0在高位补齐
}
return 0;
}
%0md表示不足m位的整型变量用0在高位补齐,%md表示不足m位的整型变量用空格在高位补齐。如果要读取的数字格式为02,如果用%2d输出,则结果为 2,用%02d输出,结果为02
1088: 手机短号 (多实例)
题目描述
手机号是一个11位长的数字串,同时,作为学生,还可以申请加入校园网,如果加入成功,你将另外拥有一个短号。假设所有的短号都是是 6+手机号的后5位,比如号码为13512345678的手机,对应的短号就是645678。
现在,如果给你一个11位长的手机号码,你能找出对应的短号吗?
输入
输入数据的第一行是一个N(N <= 200),表示有N组输入数据,接下来的N行每一行为一个11位的手机号码。
输出
输出应包括N行,每行包括一个对应的短号,输出应与输入的顺序一致。
样例输入
2
13512345678
13787600321
样例输出
645678
600321
提示
scanf()函数中,可用%md指定读取位数。
#include <stdio.h>
int main()
{
int n,num;
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%*6d%5d",&num);
printf("6%05d\n",num); //注意是%05d,不要忘了0
}
return 0;
}
1090: 整数幂(多实例测试)
题目描述
求A^B的最后三位数表示的整数(1<=A,B<=1000)
输入
第一行输入一个整数n,表示有n个测试实例,接着有n行,每行一个实例,给出两个正整数A,B
输出
针对每个测试实例,输出A^B的最后三位(没有前导0) ,单独占一行。
样例输入
2
2 3
12 6
样例输出
8
984
错误示范:
// 用pow类型导致数据不准确
#include<stdio.h>
#include<math.h>
int main()
{
int a,b,c;
int n;
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d%d",&a,&b);
c=pow(a,b);
printf("%d\n",c%1000);
}
return 0;
}
正解:
#include<stdio.h>
int main()
{
int a,b,res;
int n;
scanf("%d",&n);
for(int i=0;i<n;i++){
res=1;
scanf("%d%d",&a,&b);
for(int j=0;j<b;j++){
res=res*a;
res=res%1000;
//对本程序而言,只有结果的最后三位有意义。
//且为了防止溢出,每次结果都只取最后三位
}
printf("%d\n",res);
}
return 0;
}
1091: 童年生活二三事(多实例测试)
题目描述
Redraiment小时候走路喜欢蹦蹦跳跳,他最喜欢在楼梯上跳来跳去。 但年幼的他一次只能走上一阶或者一下子蹦上两阶。 现在一共有N阶台阶,请你计算一下Redraiment从第0阶到第N阶共有几种走法。
输入
输入包括多组数据。 每组数据包括一行:N(1≤N≤40)。 输入以0结束
输出
对应每个输入包括一个输出。 为redraiment到达第n阶不同走法的数量。
样例输入
1
3
0
样例输出
1
3
#include<stdio.h>
int main()
{
int n;
while(scanf("%d",&n),n!=0){
int a=1,b=2,c; //a存放第一项,b存放第二项
if(n==1)
printf("1\n");
else if(n==2)
printf("2\n");
else{
for(int i=3;i<=n;i++){ //从第三项开始,每一项为前两项之和
c=a+b; //前两项之和
a=b; //更改a,b的值,a,b都移到各自的下一项
b=c;
}
printf("%d\n",c);
}
}
return 0;
}
可以先试着写写前几阶台阶的规律,1阶就一种跳法,2阶有两种跳法,3阶有三种跳法(1,2;2,1;1,1,1),4阶有5种跳法……这就是熟悉的数列嘛。某项等于前两项之和。那么代码部分就好写了。