[ZZULI]1078~1091(多实例测试)

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种跳法……这就是熟悉的数列嘛。某项等于前两项之和。那么代码部分就好写了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值