首发于 c/c++日记

中M2021秋C、Java入门练习第I段——变量、表达式、分支、循环(7-71至7-140)

中国大学MOOC浙江大学翁恺老师的《程序设计入门——C语言》2021秋季课程PTA编程练习题,共140题,已全部答完,仅三道题借鉴了他人思维之后,全部为独立思考纯手敲代码(Dev-C++调试成功后,复制粘贴到PTA平台),现收集归拢。

7-71 求平方与倒数序列的部分和 (15 分)

本题要求对两个正整数m和n(m≤n)编写程序,计算序列和m2+1/m+(m+1)2+1/(m+1)+⋯+n2+1/n。

输入格式:

输入在一行中给出两个正整数m和n(m≤n),其间以空格分开。

输出格式:

在一行中按照“sum = S”的格式输出部分和的值S,精确到小数点后六位。题目保证计算结果不超过双精度范围。

输入样例:

5 10

输出样例:

sum = 355.845635

#include<stdio.h>
#include<math.h>
int main()
	int m, n;
	scanf("%d %d", &m, &n);
	double sum=0.0;
	int i;
	for (i=m;i<=n;i++)
		sum += pow(i,2);
		sum += 1.0 / (double) i;
	printf("sum = %.6f", sum);
	return 0;
}

7-72 三天打鱼两天晒网 (15 分)

中国有句俗语叫“三天打鱼两天晒网”。假设某人从某天起,开始“三天打鱼两天晒网”,问这个人在以后的第N天中是“打鱼”还是“晒网”?

输入格式:

输入在一行中给出一个不超过1000的正整数N。

输出格式:

在一行中输出此人在第N天中是“Fishing”(即“打鱼”)还是“Drying”(即“晒网”),并且输出“in day N”。

输入样例1:

103

输出样例1:

Fishing in day 103

输入样例2:

34

输出样例2:

Drying in day 34

#include<stdio.h>
#include<math.h>
int main()
	int n;
	scanf("%d", &n);
	int m = n % 5;
	if (m == 0 || m > 3)
		printf("Drying in day %d", n);
		printf("Fishing in day %d", n);
	return 0;
}

7-73 比较大小 (10 分)

本题要求将输入的任意3个整数从小到大输出。

输入格式:

输入在一行中给出3个整数,其间以空格分隔。

输出格式:

在一行中将3个整数从小到大输出,其间以“->”相连。

输入样例:


4 2 8


输出样例:


2->4->8


#include<stdio.h>
int main()
    int a,b,c;
    scanf("%d %d %d", &a, &b, &c);
    int tmp;
    if (a > b)
        tmp = a;
        a = b;
        b = tmp;
    if (a > c)
        tmp = a;
        a = c;
        c = tmp;
    if (b > c)
        tmp = b;
        b = c;
        c = tmp;
    printf("%d->%d->%d", a,b,c);
    return 0;
}

7-74 三角形判断 (15 分)

给定平面上任意三个点的坐标(x_1, y_1)、(x_2, y_2)、(x_3, y_3),检验它们能否构成三角形。

输入格式:

输入在一行中顺序给出六个[-100, 100]范围内的数字,即三个点的坐标x_1、y_1、x_2、y_2、x_3、y_3。

输出格式:

若这3个点不能构成三角形,则在一行中输出“Impossible”;若可以,则在一行中输出该三角形的周长和面积,格式为“L = 周长, A = 面积”,输出到小数点后2位。

输入样例1:


4 5 6 9 7 8


输出样例1:


L = 10.13, A = 3.00


输入样例2:


4 6 8 12 12 18


输出样例2:


Impossible


#include <stdio.h>
#include <math.h>
int main()
	double x1,y1,x2,y2,x3,y3;
	scanf("%lf %lf %lf %lf %lf %lf", &x1, &y1, &x2, &y2, &x3, &y3);
    float l1 = sqrt(pow(x1-x2, 2) + pow(y1-y2, 2));
	float l2 = sqrt(pow(x1-x3, 2) + pow(y1-y3, 2));
	float l3 = sqrt(pow(x2-x3, 2) + pow(y2-y3, 2));
	if ((l1+l2)>l3 && (l1+l3>l2) && (l2+l3>l1))
		float l = l1 + l2 + l3;
		float p = l/2.0;
		float a = sqrt(p * (p-l1) * (p-l2) * (p-l3));
		printf("L = %.2lf, A = %.2lf", l, a);
		printf("Impossible");
	return 0;
}

7-75 整数152的各位数字 (10 分)

本题要求编写程序,输出整数152的个位数字、十位数字和百位数字的值。

输入格式:

本题无输入。

输出格式:

按照以下格式输出:


152 = 个位数字 + 十位数字*10 + 百位数字*100

#include <stdio.h>
int main()
    int n = 152;
    int a = n / 100;
    int b = n % 100 / 10;
    int c = n % 10;
    printf("%d = %d + %d*10 + %d*100", n,c,b,a);
    return 0;
}

7-76 计算分段函数[3] (10 分)

本题目要求计算下列分段函数f(x)的值:

![](~/49)

输入格式:

输入在一行中给出实数x。

输出格式:

在一行中按“f(x) = result”的格式输出,其中x与result都保留一位小数。

输入样例1:


10


输出样例1:


f(10.0) = 0.1


输入样例2:


234


输出样例2:


f(234.0) = 234.0


#include <stdio.h>
int main()
    double x;
    scanf("%lf", &x);
    double res;
    if (x == 10.0)
        res = 1.0 / x;
        res = x;
    printf("f(%.1lf) = %.1f", x, res);
    return 0;
}

7-77 求1到100的和 (10 分)

本题要求编写程序,计算表达式 1 + 2 + 3 + ... + 100 的值。

输入格式:

本题无输入。

输出格式:

按照以下格式输出:


sum = 累加和


# include <stdio.h>
int main()
    int res = 100 * (1 + 100) / 2;
    printf("sum = %d", res);
    return 0;
}

7-78 计算油费 (15 分)

现在90号汽油6.95元/升、93号汽油7.44元/升、97号汽油7.93元/升。为吸引顾客,某自动加油站推出了“自助服务”和“协助服务”两个服务等级,分别可得到5%和3%的折扣。

本题要求编写程序,根据输入顾客的加油量a,汽油品种b(90、93或97)和服务类型c(m - 自助,e - 协助),计算并输出应付款。

输入格式:

输入在一行中给出两个整数和一个字符,分别表示顾客的加油量a,汽油品种b(90、93或97)和服务类型c(m - 自助,e - 协助)。

输出格式:

在一行中输出应付款额,保留小数点后2位。

输入样例:


40 97 m


输出样例:


301.34


#include <stdio.h>
int main()
	int a,b;
	char c;
	scanf("%d %d %c",&a,&b,&c);
	double cost=0.0;
	switch (b)
		case 90:
			cost = a * 6.95;
			break;
		case 93:
			cost = a * 7.44;
			break;
		case 97:
			cost = a * 7.93;
			break;
	if (c == 'm')
		cost *= 0.95;
	else if (c =='e')
		cost *= 0.97;
	printf("%.2lf",cost);
	return 0;
}

7-79 N个数求和 (20 分)

本题的要求很简单,就是求`N`个数字的和。麻烦的是,这些数字是以有理数`分子/分母`的形式给出的,你输出的和也必须是有理数的形式。

输入格式:

输入第一行给出一个正整数`N`(\le100)。随后一行按格式`a1/b1 a2/b2 ...`给出`N`个有理数。题目保证所有分子和分母都在长整型范围内。另外,负数的符号一定出现在分子前面。

输出格式:

输出上述数字和的最简形式 —— 即将结果写成`整数部分 分数部分`,其中分数部分写成`分子/分母`,要求分子小于分母,且它们没有公因子。如果结果的整数部分为0,则只输出分数部分。

输入样例1:


5

2/5 4/15 1/30 -2/60 8/3


输出样例1:


3 1/3


输入样例2:


2

4/3 2/3


输出样例2:


2


输入样例3:


3

1/3 -1/6 1/8


输出样例3:


7/24


#include <stdio.h>
int maxgys(int a, int b)
	int tmp;
	if (a<b)	
		tmp = a;
		a = b;
		b = tmp;
	while (a%b!=0)
		tmp = b;
		b = a % b;
		a = tmp;
	return b;
int main()
	int n;
	int a,b;
	scanf("%d",&n);
	int i;
	int fz=0,fm=1;
	int gys;
	for (i=0;i<n;i++)
		scanf("%d/%d",&a,&b);
		fz = fz*b + a * fm;
		fm = fm * b;
		if (fz == 0)
			fm = 1;
			continue;
		gys = maxgys(fz,fm);
		fz /= gys;  //避免过大超出精度范围 
		fm /= gys;
	if (fm==1) //仅整数 
		printf("%d",fz);
	else if (fz<fm)
		printf("%d/%d",fz,fm);
		printf("%d %d/%d",fz/fm,fz%fm,fm);
	return 0;
}

7-80 打折 (5 分)

去商场淘打折商品时,计算打折以后的价钱是件颇费脑子的事情。例如原价 ¥988,标明打 7 折,则折扣价应该是 ¥988 x 70% = ¥691.60。本题就请你写个程序替客户计算折扣价。

输入格式:

输入在一行中给出商品的原价(不超过1万元的正整数)和折扣(为[1, 9]区间内的整数),其间以空格分隔。

输出格式:

在一行中输出商品的折扣价,保留小数点后 2 位。

输入样例:


988 7


输出样例:


691.60

#include <stdio.h>
int main()
	int price,n;
	scanf("%d %d", &price,&n);
	printf("%.2lf",price*n/10.0);
	return 0;
}

7-81 2018我们要赢 (5 分)

2018年天梯赛的注册邀请码是“2018wmyy”,意思就是“2018我们要赢”。本题就请你用汉语拼音输出这句话。

输入格式:

本题没有输入。

输出格式:

在第一行中输出:“2018”;第二行中输出:“wo3 men2 yao4 ying2 !”。

输入样例:


本题没有输入。


输出样例:


2018

wo3 men2 yao4 ying2 !

#include<stdio.h>
int main()
    printf("2018\n");
    printf("wo3 men2 yao4 ying2 !");
    return 0;
}

7-82 打印沙漏 (20 分)

本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印


*****

***

*

***

*****


所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数先从大到小顺序递减到1,再从小到大顺序递增;首尾符号数相等。

给定任意N个符号,不一定能正好组成一个沙漏。要求打印出的沙漏能用掉尽可能多的符号。

输入格式:

输入在一行给出1个正整数N(\le1000)和一个符号,中间以空格分隔。

输出格式:

首先打印出由给定符号组成的最大的沙漏形状,最后在一行中输出剩下没用掉的符号数。

输入样例:


19 *


输出样例:


*****

***

*

***

*****

2

#include <stdio.h>
#include <math.h>
void my_print(int m, int n,char c)
	int i;
	for (i=0;i<m;i+=2)
		printf(" ");
	for (i=0;i<n;i++)
		printf("%c",c);
	printf("\n");
int main()
	int n;
	char c;
	scanf("%d %c",&n,&c);
	int m = sqrt(2*(n+1))-1;
	if (m%2!=1) 
		m --;
	int i;
	for (i=m;i>0;i-=2) 
		my_print(m-i,i,c);
	for (i=3;i<=m;i+=2)
		my_print(m-i,i,c);
	int res = pow(m+1,2);
	res = res/2-1;
	printf("%d",n-res);
	return 0;

7-83 币值转换 (20 分)

输入一个整数(位数不超过9位)代表一个人民币值(单位为元),请转换成财务要求的大写中文格式。如23108元,转换后变成“贰万叁仟壹百零捌”元。为了简化输出,用小写英文字母a-j顺序代表大写数字0-9,用S、B、Q、W、Y分别代表拾、百、仟、万、亿。于是23108元应被转换输出为“cWdQbBai”元。

输入格式:

输入在一行中给出一个不超过9位的非负整数。

输出格式:

在一行中输出转换后的结果。注意“零”的用法必须符合中文习惯。

输入样例1:


813227345


输出样例1:


iYbQdBcScWhQdBeSf


输入样例2:


6900


输出样例2:


gQjB

#include <stdio.h>
#include <math.h>
void myPrint(int n) 
	int flag = 0;
	int num = n/1000;
	if (num!=0)
		flag = 1;
		printf("%c%c",'a'+num,'Q');
	n = n % 1000;
	num = n/100;
	if (n!=0)
		if (num!=0) printf("%c%c",'a'+num,'B');
		else if (flag==1)
			printf("a");
			flag = 0;
	n = n % 100;
	num = n/10;
	if (n!=0)
		if (num!=0) printf("%c%c",'a'+num,'S');
		else if (flag==1)
			printf("a");
	n = n%10;
	if (n!=0)
		printf("%c",'a'+n);
int main()
	int n;
	scanf("%d",&n);
	if (n==0)
		printf("a");
		return 0;
	int num = n/pow(10,8);
	int flag=0;
	if (num!=0)
		flag = 1;
		printf("%c%c",'a'+num,'Y');
	n = n%100000000;
	num = n / pow(10,4);
	if (num!=0)
		if (num<1000 && flag==1)
			flag = 0;
			printf("a");
		else{
			flag= 1;
		myPrint(num);
		printf("W");
	n = n%10000;
	if (n!=0)
	{	if (n<1000 && flag==1)
			printf("a");
		myPrint(n);
	return 0;
}

7-84 连续因子 (20 分)

一个正整数 N 的因子中可能存在若干连续的数字。例如 630 可以分解为 3\times5\times6\times7,其中 5、6、7 就是 3 个连续的数字。给定任一正整数 N,要求编写程序求出最长连续因子的个数,并输出最小的连续因子序列。

输入格式:

输入在一行中给出一个正整数 N(1<N<2^{31})。

输出格式:

首先在第 1 行输出最长连续因子的个数;然后在第 2 行中按 `因子1*因子2*……*因子k` 的格式输出最小的连续因子序列,其中因子按递增顺序输出,1 不算在内。

输入样例:


630


输出样例:


3

5*6*7


**鸣谢用户 漏穿雪 补充数据!**

#include <stdio.h>
#include <math.h>
int isPrime(int n)
	int i;
	int is_prime = 1;
	for (i=2;i<=sqrt(n);i++)
		if (n%i==0)
			is_prime = 0;
			break;
	return is_prime;
int main()
	int n;
	scanf("%d", &n);
	if (isPrime(n))
		printf("%d\n%d",1,n);
		return 0;
	int max_i, max_j;
	int i,j;
	for (i=2;i<=sqrt(n);i++) //初始i,j ,最小的单一连续因子 
		if (n%i==0)
			max_i = i;
			max_j = i;
			break;
	int sum;
	for (i=2;i<=sqrt(n);i++) 
		sum = i;
		for (j=i+1;j<=sqrt(n);j++) 
			sum *= j;
			if (n%sum!=0) break;
		if (max_j-max_i+1<j-i)
			max_i = i;
			max_j = j-1;
	printf("%d\n",max_j-max_i+1);
	for (i=max_i;i<=max_j;i++)
		if (i!=max_j) printf("%d*",i);
		else printf("%d",i);
	return 0;
}

7-85 温度转换 (5 分)

本题要求编写程序,计算华氏温度150°F对应的摄氏温度。计算公式:C = 5\times (F-32)/9,式中:C表示摄氏温度,F表示华氏温度,输出数据要求为整型。

输入格式:

本题目没有输入。

输出格式:

按照下列格式输出


fahr = 150, celsius = 计算所得摄氏温度的整数值

#include <stdio.h>
int main()
	printf("fahr = 150, celsius = %d", 5*(150-32)/9);
	return 0;
}

7-86 整数四则运算 (10 分)

本题要求编写程序,计算2个正整数的和、差、积、商并输出。题目保证输入和输出全部在整型范围内。

输入格式:

输入在一行中给出2个正整数A和B。

输出格式:

在4行中按照格式“A 运算符 B = 结果”顺序输出和、差、积、商。

输入样例:


3 2


输出样例:


3 + 2 = 5

3 - 2 = 1

3 * 2 = 6

3 / 2 = 1

#include <stdio.h>
int main()
	int x,y;
	scanf("%d %d",&x,&y);
	printf("%d + %d = %d\n",x,y,x+y);
	printf("%d - %d = %d\n",x,y,x-y);
	printf("%d * %d = %d\n",x,y,x*y);
	printf("%d / %d = %d",x,y,x/y);
	return 0;
}

7-87 计算分段函数[1] (10 分)

本题目要求计算下列分段函数f(x)的值:

![公式](~/1)

输入格式:

输入在一行中给出实数x。

输出格式:

在一行中按“f(x) = result”的格式输出,其中x与result都保留一位小数。

输入样例1:


10


输出样例1:


f(10.0) = 0.1


输入样例2:


0


输出样例2:


f(0.0) = 0.0

#include <stdio.h>
int main()
	double x;
	scanf("%lf", &x);
	double res;
	if (x == 0)
		res = 0.0;
		res = 1.0/x;
	printf("f(%.1lf) = %.1lf",x,res);
	return 0;
}

7-88 计算分段函数[2] (10 分)

本题目要求计算下列分段函数f(x)的值:

![f2-11](~/2)

注:可在头文件中包含`math.h`,并调用`sqrt`函数求平方根,调用`pow`函数求幂。

输入格式:

输入在一行中给出实数x。

输出格式:

在一行中按“f(x) = result”的格式输出,其中x与result都保留两位小数。

输入样例1:


10


输出样例1:


f(10.00) = 3.16


输入样例2:


-0.5


输出样例2:


f(-0.50) = -2.75

#include <stdio.h>
#include <math.h>
int main()
	double x;
	scanf("%lf", &x);
	double res;
	if (x >= 0)
		res = sqrt(x);
		res = pow(x+1,2) + 2*x + 1/x;
	printf("f(%.2lf) = %.2lf",x,res);
	return 0;
}

7-89 阶梯电价 (15 分)

为了提倡居民节约用电,某省电力公司执行“阶梯电价”,安装一户一表的居民用户电价分为两个“阶梯”:月用电量50千瓦时(含50千瓦时)以内的,电价为0.53元/千瓦时;超过50千瓦时的,超出部分的用电量,电价上调0.05元/千瓦时。请编写程序计算电费。

输入格式:

输入在一行中给出某用户的月用电量(单位:千瓦时)。

输出格式:

在一行中输出该用户应支付的电费(元),结果保留两位小数,格式如:“cost = 应付电费值”;若用电量小于0,则输出"Invalid Value!"。

输入样例1:


10


输出样例1:


cost = 5.30


输入样例2:


100


输出样例2:


cost = 55.50

#include <stdio.h>
#include <math.h>
int main()
	double x;
	scanf("%lf", &x);
	double res=0.0;
	if (x > 50)
		res = x*0.53 + (x-50)*0.05;
		res = x * 0.53;
	if (x<0)
		printf("Invalid Value!");
		printf("cost = %.2lf",res);
	return 0;
}

7-90 统计字符 (15 分)

本题要求编写程序,输入10个字符,统计其中英文字母、空格或回车、数字字符和其他字符的个数。

输入格式:

输入为10个字符。最后一个回车表示输入结束,不算在内。

输出格式:

在一行内按照


letter = 英文字母个数, blank = 空格或回车个数, digit = 数字字符个数, other = 其他字符个数


的格式输出。

输入样例:


aZ &

09 Az


输出样例:


letter = 4, blank = 3, digit = 2, other = 1

#include <stdio.h>
int main()
	char c;
	int i;
	int letter=0,blank=0,digit=0,other=0;
	for (i=0;i<10;i++)
		scanf("%c",&c);
		if (c==' ' || c == '\n')
			blank += 1;
		else if (c >= 'a' && c <= 'z')
			letter += 1;
		else if (c>='A' && c<='Z')
			letter += 1;
		else if (c >= '0' && c <= '9')
			digit += 1;
			other += 1;
	printf("letter = %d, blank = %d, digit = %d, other = %d",letter,blank,digit,other);
	return 0;
}

7-91 输出闰年 (15 分)

输出21世纪中截止某个年份以来的所有闰年年份。注意:闰年的判别条件是该年年份能被4整除但不能被100整除、或者能被400整除。

输入格式:

输入在一行中给出21世纪的某个截止年份。

输出格式:

逐行输出满足条件的所有闰年年份,即每个年份占一行。输入若非21世纪的年份则输出"Invalid year!"。若不存在任何闰年,则输出“None”。

输入样例1:


2048


输出样例1:


2004

2008

2012

2016

2020

2024

2028

2032

2036

2040

2044

2048


输入样例2:


2000


输出样例2:


Invalid year!

#include <stdio.h>
int isrunnian(int year)
	int res = 1;
	if (year % 4 !=0)
		res = 0;
	else if (year % 100 == 0 && year % 400 != 0)
		res = 0;
	return res;
int main()
	int year;
	scanf("%d",&year);
	if (year <= 2000 || year > 2100)
		printf("Invalid year!");
		int start = 2001;
		int cnt = 0;
		while (start <= year)
			if (isrunnian(start))
				cnt += 1;
				printf("%d\n",start);
			start += 1;
		if (cnt == 0)
			printf("None");
	return 0;
}

7-92 特殊a串数列求和 (20 分)

给定两个均不超过9的正整数a和n,要求编写程序求a+aa+aaa++\cdots +aa\cdots a(n个a)之和。

输入格式:

输入在一行中给出不超过9的正整数a和n。

输出格式:

在一行中按照“s = 对应的和”的格式输出。

输入样例:


2 3


输出样例:


s = 246

#include <stdio.h>
int main()
	int a,n;
	scanf("%d %d",&a,&n);
	int i;
	int sum=0,num=0;
	for (i=1;i<=n;i++)
		num = num *10 + a;
		sum += num;
	printf("s = %d", sum);
	return 0;
}

7-93 水仙花数 (20 分)

水仙花数是指一个N位正整数(N\ge 3),它的每个位上的数字的N次幂之和等于它本身。例如:153 = 1^3 + 5^3+ 3^3。 本题要求编写程序,计算所有N位水仙花数。

输入格式:

输入在一行中给出一个正整数N(3\le N\le 7)。

输出格式:

按递增顺序输出所有N位水仙花数,每个数字占一行。

输入样例:


3


输出样例:


153

370

371

407

#include <stdio.h>
#include <math.h>
int mypow(int a, int b)
	int i, t = a;
	for (i=1;i<b;i++)	
		a *= t;
	return a;
int shuixianhua(int n, int m)
	int sum=0;
	int num;
	int t =n;
	while(n)
		num = mypow(n%10,m);
		sum += num;
		n /= 10;
	int res = 0;
	if (t==sum)
		res = 1;
	return res;
int main(int argc, char const *argv[])
	int n;
	scanf("%d",&n);
	int num = pow(10,n-1);
	int end = pow(10,n);
	while (num<end)
		if (shuixianhua(num,n))
			printf("%d\n",num);
		num++;
	return 0;
}

7-94 计算华氏温度 (5 分)

本题要求编写程序,计算摄氏温度26°C 对应的华氏温度。计算公式:F = 9\times C/5+32,式中:C表示摄氏温度,F表示华氏温度,输出数据要求为整型。

输入格式:

本题目没有输入。

输出格式:

按照下列格式输出


celsius = 26, fahr = 对应的华氏温度整数值

#include <stdio.h>
#include <math.h>
int main(int argc, char const *argv[])
	printf("celsius = 26, fahr = %d", 9*26/5 + 32);
	return 0;
}

7-95 计算火车运行时间 (15 分)

本题要求根据火车的出发时间和达到时间,编写程序计算整个旅途所用的时间。

输入格式:

输入在一行中给出2个4位正整数,其间以空格分隔,分别表示火车的出发时间和到达时间。每个时间的格式为2位小时数(00-23)和2位分钟数(00-59),假设出发和到达在同一天内。

输出格式:

在一行输出该旅途所用的时间,格式为“hh:mm”,其中hh为2位小时数、mm为2位分钟数。

输入样例:


1201 1530


输出样例:


03:29

#include <stdio.h>
#include <math.h>
int cal_time(char a[], int n)
	int time;
	time = (a[0]-'0') *10*60;
	time += (a[1]-'0')*60;
	time += (a[2]-'0')*10;
	time += (a[3]-'0');
	return time;
int main(int argc, char const *argv[])
	char s[5],e[5];
	scanf("%s %s",s,e);
	int start = cal_time(s,4);
	int end = cal_time(e,4);
	int time = end - start;
	int h, m;
	h = time/60;
	m = time%60;
	printf("%0.2d:%0.2d",h,m);
	return 0;
}

7-96 计算存款利息 (10 分)

本题目要求计算存款利息,计算公式为interest = money\times (1+rate)^{year} - money,其中interest为存款到期时的利息(税前),money是存款金额,year是存期,rate是年利率。

输入格式:

输入在一行中顺序给出三个正实数money、year和rate,以空格分隔。

输出格式:

在一行中按“interest = 利息”的格式输出,其中利息保留两位小数。

输入样例:


1000 3 0.025


输出样例:


interest = 76.89

#include <stdio.h>
#include <math.h>
int main(int argc, char const *argv[])
	double money, year, rate;
	scanf("%lf %lf %lf", &money, &year, &rate);
	printf("interest = %.2lf", money*pow(1+rate,year)-money);
	return 0;
}

7-97 计算个人所得税 (10 分)

假设个人所得税为:税率\times(工资-1600)。请编写程序计算应缴的所得税,其中税率定义为:

- 当工资不超过1600时,税率为0;

- 当工资在区间(1600, 2500]时,税率为5%;

- 当工资在区间(2500, 3500]时,税率为10%;

- 当工资在区间(3500, 4500]时,税率为15%;

- 当工资超过4500时,税率为20%。

输入格式:

输入在一行中给出非负工资。

输出格式:

在一行输出个人所得税,精确到小数点后2位。

输入样例1:


1600


输出样例1:


0.00


输入样例2:


1601


输出样例2:


0.05


输入样例3:


3000


输出样例3:


140.00


输入样例4:


4000


输出样例4:


360.00


输入样例5:


5000


输出样例5:


680.00

#include <stdio.h>
#include <math.h>
int main(int argc, char const *argv[])
	double x,y;
	scanf("%lf",&x);
	y = 0;
	if (x>1600 && x<=2500)
		y = (x-1600) * 0.05;
	else if (x>2500 && x<=3500)
		y = (x-1600) * 0.1;
	else if (x>3500 && x<=4500)
		y = (x-1600) * 0.15;
	else if (x>4500)
		y = (x-1600) * 0.2;
	printf("%.2lf", y);
	return 0;
}

7-98 两个数的简单计算器 (10 分)

本题要求编写一个简单计算器程序,可根据输入的运算符,对2个整数进行加、减、乘、除或求余运算。题目保证输入和输出均不超过整型范围。

输入格式:

输入在一行中依次输入操作数1、运算符、操作数2,其间以1个空格分隔。操作数的数据类型为整型,且保证除法和求余的分母非零。

输出格式:

当运算符为`+`、`-`、`*`、`/`、`%`时,在一行输出相应的运算结果。若输入是非法符号(即除了加、减、乘、除和求余五种运算符以外的其他符号)则输出`ERROR`。

输入样例1:


-7 / 2


输出样例1:


-3


输入样例2:


3 & 6


输出样例2:


ERROR

#include <stdio.h>
#include <math.h>
#include <stdlib.h> 
int main(int argc, char const *argv[])
	int x, y;
	char c;
	scanf("%d %c %d", &x,&c,&y);
	switch (c)
		case '+':
			printf("%d",x+y);
			break;
		case '-':
			printf("%d",x-y);
			break;
		case '*':
			printf("%d",x*y);
			break;
		case '/':
			printf("%d",x/y);
			break;
		case '%':
			printf("%d",x%y);
			break;
		default:
			printf("ERROR");
	return 0;
}

7-99 打印九九口诀表 (15 分)

下面是一个完整的下三角九九口诀表:


1*1=1

1*2=2 2*2=4

1*3=3 2*3=6 3*3=9

1*4=4 2*4=8 3*4=12 4*4=16

1*5=5 2*5=10 3*5=15 4*5=20 5*5=25

1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36

1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49

1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64

1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81


本题要求对任意给定的一位正整数`N`,输出从`1*1`到`N*N`的部分口诀表。

输入格式:

输入在一行中给出一个正整数`N`(1\le`N`\le9)。

输出格式:

输出下三角`N*N`部分口诀表,其中等号右边数字占4位、左对齐。

输入样例:


4


输出样例:


1*1=1

1*2=2 2*2=4

1*3=3 2*3=6 3*3=9

1*4=4 2*4=8 3*4=12 4*4=16

#include <stdio.h>
#include <math.h>
#include <stdlib.h> 
int main(int argc, char const *argv[])
	int n;
	scanf("%d", &n);
	int i,j;
	for (i=1;i<=n;i++)
		for (j=1;j<=i;j++)
			printf("%d*%d=%-4d", j,i,j*i);
		if (i!=n)
			printf("\n");
	return 0;
}

7-100 逆序的三位数 (10 分)

程序每次读入一个正3位数,然后输出按位逆序的数字。注意:当输入的数字含有结尾的0时,输出不应带有前导的0。比如输入700,输出应该是7。

输入格式:

每个测试是一个3位的正整数。

输出格式:

输出按位逆序的数。

输入样例:


123


输出样例:


321


**鸣谢安阳师范学院软件学院李康康同学补充数据!**

#include <stdio.h>
#include <math.h>
#include <stdlib.h> 
int main(int argc, char const *argv[])
	int n;
	scanf("%d", &n);
	int sum=0;
	while(n)
		sum = sum*10 + n%10;
		n/=10;
	printf("%d",sum);
	return 0;
}

7-101 人民币兑换 (15 分)

1元5角钱人民币兑换5分、2分和1分的硬币(每一种都要有)共100枚,会有很多种兑换方案。请编写程序给出各种兑换方案。

输入格式:

输入为一个正整数n,表示要求输出前n种可能的方案。方案的顺序,是按照5分硬币从少到多排列的。

输出格式:

显示前n种方案中5分、2分、1分硬币各多少枚。每行显示一种方案,数字之间空一格,最后一个数字后没有空格。

注意:如果全部方案不到n种,就顺序输出全部可能的方案。

输入样例:


5


输出样例:


1 46 53

2 42 56

3 38 59

4 34 62

5 30 65

#include <stdio.h>
#include <math.h>
#include <stdlib.h> 
int main(int argc, char const *argv[])
	int n;
	scanf("%d", &n);
	int i,j,z;
	int cnt=0;
	int flag = 0;
	for (i=1;i<30;i++)
		if (flag) break;
		for (j=1;j<75;j++)
			if (flag) break;
			for (z=1;z<100;z++)
				if (flag) break;
				if (5*i+2*j+z==150 && i+j+z==100)
					printf("%d %d %d", i,j,z);
					cnt += 1;
					if (cnt==n) flag=1;
					else printf("\n");
	return 0;
}

7-102 大笨钟 (10 分)

微博上有个自称“大笨钟V”的家伙,每天敲钟催促码农们爱惜身体早点睡觉。不过由于笨钟自己作息也不是很规律,所以敲钟并不定时。一般敲钟的点数是根据敲钟时间而定的,如果正好在某个整点敲,那么“当”数就等于那个整点数;如果过了整点,就敲下一个整点数。另外,虽然一天有24小时,钟却是只在后半天敲1~12下。例如在23:00敲钟,就是“当当当当当当当当当当当”,而到了23:01就会是“当当当当当当当当当当当当”。在午夜00:00到中午12:00期间(端点时间包括在内),笨钟是不敲的。

下面就请你写个程序,根据当前时间替大笨钟敲钟。

输入格式:

输入第一行按照`hh:mm`的格式给出当前时间。其中`hh`是小时,在00到23之间;`mm`是分钟,在00到59之间。

输出格式:

根据当前时间替大笨钟敲钟,即在一行中输出相应数量个`Dang`。如果不是敲钟期,则输出:


Only hh:mm. Too early to Dang.


其中`hh:mm`是输入的时间。

输入样例1:


19:05


输出样例1:


DangDangDangDangDangDangDangDang


输入样例2:


07:05


输出样例2:


Only 07:05. Too early to Dang.

#include <stdio.h>
#include <math.h>
#include <stdlib.h> 
int main(int argc, char const *argv[])
	int h,m,i;
	scanf("%d:%d", &h, &m);
	if (h<12 || (h==12 && m==0))
		printf("Only %0.2d:%0.2d.  Too early to Dang.",h,m);
		for (i=0;i<h-12;i++)
			printf("Dang");
		if (m!=0)
		printf("Dang");
	return 0;
}

7-103 A除以B (10 分)

真的是简单题哈 —— 给定两个绝对值不超过100的整数A和B,要求你按照“A/B=商”的格式输出结果。

输入格式:

输入在第一行给出两个整数A和B(-100 \le A, B \le 100),数字间以空格分隔。

输出格式:

在一行中输出结果:如果分母是正数,则输出“A/B=商”;如果分母是负数,则要用括号把分母括起来输出;如果分母为零,则输出的商应为`Error`。输出的商应保留小数点后2位。

输入样例1:


-1 2


输出样例1:


-1/2=-0.50


输入样例2:


1 -3


输出样例2:


1/(-3)=-0.33


输入样例3:


5 0


输出样例3:


5/0=Error

#include <stdio.h>
#include <math.h>
#include <stdlib.h> 
int main(int argc, char const *argv[])
	int a,b;
	scanf("%d %d", &a, &b);
	printf("%d/",a);
	if (b < 0)
		printf("(%d)=", b);
		printf("%d=",b);
	if (b==0)
		printf("Error");
		printf("%.2f", (float)a/b);
	return 0;
}

7-104 新世界 (5 分)

这道超级简单的题目没有任何输入。

你只需要在第一行中输出程序员钦定名言“Hello World”,并且在第二行中输出更新版的“Hello New World”就可以了。

#include <stdio.h>
int main()
    printf("Hello World\n");
    printf("Hello New World");
    return 0;
}

7-105 寻找250 (10 分)

![](~/365)

对方不想和你说话,并向你扔了一串数…… 而你必须从这一串数字中找到“250”这个高大上的感人数字。

输入格式:

输入在一行中给出不知道多少个绝对值不超过1000的整数,其中保证至少存在一个“250”。

输出格式:

在一行中输出第一次出现的“250”是对方扔过来的第几个数字(计数从1开始)。题目保证输出的数字在整型范围内。

输入样例:


888 666 123 -233 250 13 250 -222


输出样例:


5

#include <stdio.h>
#include <math.h>
#include <stdlib.h> 
int main()
	int cnt=0;
	int x;
		scanf("%d",&x);
		cnt ++;
	}while(x!=250);
	printf("%d", cnt);
	return 0;
}

7-106 求平方根序列前N项和 (15 分)

本题要求编写程序,计算平方根序列\sqrt{1} + \sqrt{2} + \sqrt{3} + \cdots的前N项之和。可包含头文件`math.h`,并调用`sqrt`函数求平方根。

输入格式:

输入在一行中给出一个正整数N。

输出格式:

在一行中按照“sum = S”的格式输出部分和的值S,精确到小数点后两位。题目保证计算结果不超过双精度范围。

输入样例:


10


输出样例:


sum = 22.47

#include <stdio.h>
#include <math.h>
#include <stdlib.h> 
int main()
	int n;
	scanf("%d", &n);
	double sum = 0;
	int i;
	for (i=1;i<=n;i++)
		sum += sqrt(i);
	printf("sum = %.2f", sum);
	return 0;
}

7-107 找出最小值 (20 分)

本题要求编写程序,找出给定一系列整数中的最小值。

输入格式:

输入在一行中首先给出一个正整数n,之后是n个整数,其间以空格分隔。

输出格式:

在一行中按照“min = 最小值”的格式输出n个整数中的最小值。

输入样例:


4 -2 -123 100 0


输出样例:


min = -123

#include <stdio.h>
#include <math.h>
#include <stdlib.h> 
int main()
	int n, min;
	scanf("%d %d", &n, &min);
	n--;
	int x;
	while(n)
		scanf("%d", &x);
		if (min > x)
			min = x;
		n--;
	printf("min = %d", min);
	return 0;
}

7-108 将x的平方赋值给y (5 分)

假设x的值为3,计算x的平方并赋值给y,分别以“y = x * x”和“x * x = y”的形式输出x和y的值。

输入格式:

本题无输入

输出格式:

按照下列格式输出代入`x`=3的结果:


y = x * x

x * x = y

#include <stdio.h>
int main()
    printf("%d = %d * %d\n", 9, 3,3);
    printf("%d * %d = %d",3,3,9 );
    return 0;
}

7-109 计算工资 (15 分)

某公司员工的工资计算方法如下:一周内工作时间不超过40小时,按正常工作时间计酬;超出40小时的工作时间部分,按正常工作时间报酬的1.5倍计酬。员工按进公司时间分为新职工和老职工,进公司不少于5年的员工为老职工,5年以下的为新职工。新职工的正常工资为30元/小时,老职工的正常工资为50元/小时。请按该计酬方式计算员工的工资。

输入格式:

输入在一行中给出2个正整数,分别为某员工入职年数和周工作时间,其间以空格分隔。

输出格式:

在一行输出该员工的周薪,精确到小数点后2位。

输入样例1:


5 40


输出样例1:


2000.00


输入样例2:


3 50


输出样例2:


1650.00

#include <stdio.h>
#include <math.h>
double money(int a, int h)
	double y=0;
	if (h <= 40) 
		y = a * h;
		y = a * h + 0.5 * a * (h - 40);
	return y;
int main()
	int y,h;
	scanf("%d %d", &y, &h);
	double sal = 0;
	if (y < 5)
		sal = money(30, h);
		sal = money(50, h);
	printf("%.2lf", sal);
	return 0;
}

7-110 求符合给定条件的整数集 (15 分)

给定不超过6的正整数A,考虑从A开始的连续4个数字。请输出所有由它们组成的无重复数字的3位数。

输入格式:

输入在一行中给出A。

输出格式:

输出满足条件的的3位数,要求从小到大,每行6个整数。整数间以空格分隔,但行末不能有多余空格。

输入样例:


2


输出样例:


234 235 243 245 253 254

324 325 342 345 352 354

423 425 432 435 452 453

523 524 532 534 542 543

#include <stdio.h>
#include <math.h>
int main()
	int a;
	scanf("%d", &a);
	int b=a+1,c=b+1,d=c+1;
	int i,j,x;
	int cnt = 0;
	for (i=a;i<a+4;i++)
		for (j=a;j<a+4;j++)
			if (j == i)
				continue;
			for (x=a;x<a+4;x++)
				if (x == i || x == j)
						continue;
					printf("%d%d%d", i,j,x);
					cnt += 1;
					if (cnt < 6)
						printf(" ");
						printf("\n");
						cnt = 0;
	return 0;
}

7-111 求特殊方程的正整数解 (15 分)

本题要求对任意给定的正整数N,求方程X^2 + Y^2 =N的全部正整数解。

输入格式:

输入在一行中给出正整数N(\le10000)。

输出格式:

输出方程X^2 + Y^2 =N的全部正整数解,其中X\le Y。每组解占1行,两数字间以1空格分隔,按X的递增顺序输出。如果没有解,则输出`No Solution`。

输入样例1:


884


输出样例1:


10 28

20 22


输入样例2:


11


输出样例2:


No Solution

#include <stdio.h>
#include <math.h>
int main()
	int n;
	scanf("%d", &n);
	int x, y;
	int flag = 0;
	for (x=1;x<=sqrt(n);x++)
		y = sqrt(n - pow(x,2));
		if ( x <= y && pow(x,2) + pow(y,2) == n) 
			printf("%d %d\n", x, y);
			flag = 1;
	if (flag == 0)
		printf("No Solution");
	return 0;
}

7-112 约分最简分式 (15 分)

分数可以表示为`分子/分母`的形式。编写一个程序,要求用户输入一个分数,然后将其约分为最简分式。最简分式是指分子和分母不具有可以约分的成分了。如6/12可以被约分为1/2。当分子大于分母时,不需要表达为整数又分数的形式,即11/8还是11/8;而当分子分母相等时,仍然表达为1/1的分数形式。

输入格式:

输入在一行中给出一个分数,分子和分母中间以斜杠`/`分隔,如:`12/34`表示34分之12。分子和分母都是正整数(不包含0,如果不清楚正整数的定义的话)。

<b>提示:</b>

* 对于C语言,在`scanf`的格式字符串中加入`/`,让`scanf`来处理这个斜杠。

* 对于Python语言,用`a,b=map(int, input().split('/'))`这样的代码来处理这个斜杠。

输出格式:

在一行中输出这个分数对应的最简分式,格式与输入的相同,即采用`分子/分母`的形式表示分数。如

`5/6`表示6分之5。

输入样例:


66/120


输出样例:


11/20

#include <stdio.h>
int main()
	int fz, fm;
	scanf("%d/%d", &fz, &fm);
	int tmp;
	int a = fz, b = fm;
	if ( a < b)
		tmp = a;
		a = b;
		b = tmp;
	while (a % b !=0)
		tmp = b;
		b = a % b;
		a = tmp;
	printf("%d/%d", fz/b, fm/b);
	return 0;
}

7-113 单词长度 (15 分)

你的程序要读入一行文本,其中以空格分隔为若干个单词,以`.`结束。你要输出每个单词的长度。这里的单词与语言无关,可以包括各种符号,比如`it's`算一个单词,长度为4。注意,行中可能出现连续的空格;最后的`.`不计算在内。

输入格式:

输入在一行中给出一行文本,以`.`结束

<b>提示:</b>用`scanf("%c",...);`来读入一个字符,直到读到`.`为止。

输出格式:

在一行中输出这行文本对应的单词的长度,每个长度之间以空格隔开,行末没有最后的空格。

输入样例:


It's great to see you here.


输出样例:


4 5 2 3 3 4

#include<stdio.h>
#include<stdbool.h>
#include<string.h>
int main()
	char str[100];
	int res[100];
	scanf("%[^\n]", str);  // 以\n表示读取结束(空格的时候不结束) 
	int n = strlen(str);
	int i,tmp=0,count = 0;
	bool flag = 0;
	for (i=0;i<n;i++)
		if (str[i] == '.')
			if (tmp) res[count++] = tmp;
			flag = 1;
			break; 
		if (str[i] != ' ')
			tmp++;
		if (str[i] == ' '|| i==n-1)
			if (tmp)
				res[count++] = tmp;
				tmp = 0;
	if (flag)
		for (i=0;i<count;i++)
			if (i != 0) printf(" ");
			printf("%d", res[i]);
	return 0;
}

7-114 谁先倒 (15 分)

划拳是古老中国酒文化的一个有趣的组成部分。酒桌上两人划拳的方法为:每人口中喊出一个数字,同时用手比划出一个数字。如果谁比划出的数字正好等于两人喊出的数字之和,谁就输了,输家罚一杯酒。两人同赢或两人同输则继续下一轮,直到唯一的赢家出现。

下面给出甲、乙两人的酒量(最多能喝多少杯不倒)和划拳记录,请你判断两个人谁先倒。

输入格式:

输入第一行先后给出甲、乙两人的酒量(不超过100的非负整数),以空格分隔。下一行给出一个正整数`N`(\le 100),随后`N`行,每行给出一轮划拳的记录,格式为:


甲喊 甲划 乙喊 乙划


其中`喊`是喊出的数字,`划`是划出的数字,均为不超过100的正整数(两只手一起划)。

输出格式:

在第一行中输出先倒下的那个人:`A`代表甲,`B`代表乙。第二行中输出没倒的那个人喝了多少杯。题目保证有一个人倒下。注意程序处理到有人倒下就终止,后面的数据不必处理。

输入样例:


1 1

6

8 10 9 12

5 10 5 10

3 8 5 12

12 18 1 13

4 16 12 15

15 1 1 16


输出样例:


A

1

#include <stdio.h>
int main()
	int x,y;
	scanf("%d %d", &x, &y);
	int x0 = x,y0=y;
	int n;
	scanf("%d", &n);
	int x1,y1,x2,y2;
	while (n)
		scanf("%d %d %d %d", &x1, &y1, &x2, &y2);
		if (y1 == x1+x2 && y2 != x1 + x2)
			x--;
		else if (y1 != x1+x2 && y2 == x1 + x2)
			y--;
		if (x<0 || y<0)
			break;
	if (x<0)
		printf("A\n%d", y0-y);
		printf("B\n%d", x0-x);
	return 0;
}

7-115 小于m的最大的10个素数 (15 分)

给定一个整数m(50<m<20000),找出小于m的最大的10个素数。

输入格式:

输入在一行中给出一个正整数m(50<m<20000)。

输出格式:

在一行中按递减顺序输出10个满足条件的素数,每个素数输出占6列。没有其它任何附加格式和字符。

输入样例:


229


输出样例:


227 223 211 199 197 193 191 181 179 173


感谢中国青年政治学院的同学修正数据!

#include <stdio.h>
#include <math.h>
int isPrime(int n)
	int is_prime = 1;
	int i;
	for (i=2;i<=sqrt(n);i++)
		if (n % i == 0)
			is_prime = 0;
			break;
	return is_prime;
int main()
	int m;
	scanf("%d", &m);
	int cnt=0;
	m --;
	while (cnt < 10)
		if (isPrime(m))
			cnt += 1;
			printf("%6d", m);
		m --;
	return 0;
}

7-116 计算圆周率 (15 分)

根据下面关系式,求圆周率的值,直到最后一项的值小于给定阈值。

\frac{\pi}{2} = 1+\frac{1}{3} + \frac{2!}{3\times 5}+ \frac{3!}{3\times 5\times 7}+\cdots + \frac{n!}{3\times 5\times 7\times \cdots \times (2n+1)}+\cdots

输入格式:

输入在一行中给出小于1的阈值。

输出格式:

在一行中输出满足阈值条件的近似圆周率,输出到小数点后6位。

输入样例:


0.01


输出样例:


3.132157

#include <stdio.h>
int main()
	double x;
	scanf("%lf", &x);
	double sum=1;
	double fz=1,fm=1;
	int i;
	double cur = 1;
	i = 1;
	while (cur >= x)
		fz *= i;
		fm *= (2*i+1);
		cur = fz / fm;
		sum += cur;
		i ++;
	printf("%.6lf", sum*2);
	return 0;
}

7-117 整数的分类处理 (20 分)

给定 N 个正整数,要求你从中得到下列三种计算结果:

- A1 = 能被 3 整除的最大整数

- A2 = 存在整数 K 使之可以表示为 3K+1 的整数的个数

- A3 = 存在整数 K 使之可以表示为 3K+2 的所有整数的平均值(精确到小数点后 1 位)

输入格式:

输入首先在第一行给出一个正整数 N,随后一行给出 N 个正整数。所有数字都不超过 100,同行数字以空格分隔。

输出格式:

在一行中顺序输出 A1、A2、A3的值,其间以 1 个空格分隔。如果某个数字不存在,则对应输出`NONE`。

输入样例 1:


8

5 8 7 6 9 1 3 10


输出样例 1:


9 3 6.5


输入样例 2:


8

15 18 7 6 9 1 3 10


输出样例 2:


18 3 NONE

#include <stdio.h>
int main()
	int a1 = -1;
	int a2 = 0;
	double a3=0;
	int cnt = 0;
	int n;
	scanf("%d", &n);
	int x;
	while (n)
		scanf("%d", &x);
		if (x%3==0)
			a1 = a1 > x ? a1 : x;
		if (x%3==1)
			a2 += 1;
		if (x%3==2)
			a3 += x;
			cnt += 1;
		n--;
	if (a1==-1)
		printf("NONE ");
		printf("%d ", a1);
	if (a2==0)
		printf("NONE ");
		printf("%d ", a2);
	if (a3 == 0)
		printf("NONE");
		printf("%.1lf", a3/cnt);
	return 0;
}

7-118 分队列 (10 分)

班级第一次列队,通常老师会让同学按身高排成一列,然后1、2报数,喊到1的同学向前一步,就这样,队伍就变成两列了。假设现在一个班级有n个同学,并且他们已经按身高排成了一列,同学按身高从1到n编号,你能告诉我最后哪些编号的同学站在了第一列么?

输入格式:

输入一个正整数n,表示班级的人数。

输出格式:

按顺序输出所有在第一列的同学对应的编号,每两个编号之间用一个空格隔开。

输入样例:


11


输出样例:


1 3 5 7 9 11

#include <stdio.h>
int main()
	int n;
	scanf("%d", &n);
	int i;
	for (i=1;i<=n;i++)
		if (i%2==1)
			printf("%d", i);
			if (i !=n-1 && i != n)
				printf(" ");
	return 0;
}

7-119 我是升旗手 (10 分)

一年一度的升旗手选拔又要到了,学校要求每个班级选出一位同学做升旗手的候选人。因

为升旗手对身高有严格的要求,所以班主任决定选班级里个子最高的同学(如果两位同学

一样高,则选任意一位)。你能很快地给老师答案么?

输入格式:

输入包括两行。 第一行:包括一个整数n,表示班级里共有n位同学。 第二行:包含n个三位数,表示每一位同学的身高。

输出格式:

输出身高最高的同学的身高。

输入样例:


4

130 125 129 140


输出样例:


140

#include <stdio.h>
int main()
	int n;
	scanf("%d", &n);
	int max = 0;
	int h;
	while (n)
		scanf("%d", &h);
		max = h > max ? h : max;
		n --;
	printf("%d", max);
	return 0;
}

7-120 兔子繁殖问题 (10 分)

已知有一对兔子,每个月可以生一对兔子,而小兔子一个月后又可以生一对小兔子(比如:2月份出生的小兔子4月份可以生育)。也就是说,兔子的对数为:第一个月1对,第二个月2对,第三个月3对,第四个月5对.....假设兔子的生育期为两年,且不死。那么问题来了,你能说出每个月的兔子数么?

输入格式:

输入一个数n,表示第n个月,1<=n<=24。

输出格式:

输出这个月兔子的数目。

输入样例:


4


输出样例:


5

#include <stdio.h>
int main()
	int n;
	scanf("%d", &n);
	int a0 = 1, a1 = 1;
	int res;
	if (n==1)
		res = 1;
		while (n > 1)
			res = a1 + a0;
			a0 =a1;
			a1 = res;
			n--;
	printf("%d", res);
	return 0;
}

7-121 作品评分 (10 分)

全国中小学生Scratch作品大赛拉开了序幕。每个参赛选手可以通过网络直接上传作品。本次比赛人人可做评委。每个网络评委可以通过网络对每一件作品进行打分。评分系统也是请程序高手设计的,能自动去掉一个最高分和一个最低分,求出平均分。

输入格式:

输入数据包括两行: 第一行为n,表示n个评委,n>2。

第二行是n个评委的打分,分数之间有一个空格。打分是可以带有小数部分的。

输出格式:

输出平均分,结果保留两位小数。

输入样例:


6

10 9 8 7.9 9 9.5


输出样例:


8.88

#include <stdio.h>
int main()
	int n;
	scanf("%d", &n);
	double score, max, min,sum;
	int i;
	scanf("%lf", &score);
	max = score;
	min = score;
	sum = score;
	for (i=1;i<n;i++)
		scanf("%lf", &score);
		sum += score;
		if (score > max)
			max = score;
		if (score < min)
			min = score;
	printf("%.2lf", (sum-min-max)/(n-2));
	return 0;
}

7-122 3n+1 (10 分)

有这样一个猜想:对于任意大于1的自然数n,若n为奇数,则将n变成3n+1,否则变成n的一半。经过若干次这样的变换,一定会使n变为1。例如3->10->5->16->8->4->2->1。对于n=1的情况,当然就不用变化了。

输入格式:

输入一个正整数n,n的范围是[1,999999]。

输出格式:

输出变换的次数。

输入样例:


3


输出样例:


7

#include <stdio.h>
int main()
	int n;
	scanf("%d", &n);
	int cnt=0;
	while (n!=1)
		if (n % 2 ==0)
			n /= 2;
			n = 3 * n + 1;
		cnt += 1;
	printf("%d", cnt);
	return 0;
}

7-123 空心字母金字塔 (10 分)

输入一个大写的英文字母,输出空心的字母金字塔。

输入格式:

一个大写英文字母。

输出格式:

一个空心的大写英文字母金字塔,其中第1层的“A”在第1行的第40列,列从1开始计数。

输入样例:


E


输出样例:


A

B B

C C

D D

EEEEEEEEE

#include <stdio.h>
int main()
	char c;
	scanf("%c", &c);
	int n = c - 'A' + 1;
	int i;
	char p;
	int x, y;
	int j;
	for (i=0;i<n-1;i++)
		p = 'A'	 + i;
		x = 39 - i;
		y = 39 + i;
		for (j=0;j<=y;j++)
			if (j==x || j==y)
				printf("%c", p);
				printf(" ");
		printf("\n");
	x = 39 - n + 1;
	y = 39 + n - 1;
	p = 'A' + n - 1;
	for (j=0;j<x;j++)
		printf(" ");
	for (j=x;j<=y;j++)
		printf("%c", p);
	return 0;
}

7-124 上三角数字三角形 (10 分)

输入一个正整数n,输出具有n层的上三角数字三角形。

输入格式:

只有一个正整数n,1<=n<=100。

输出格式:

一个上三角数字三角形,每个数字占四个字符位置。

输入样例:


5


输出样例:


1 2 3 4 5

6 7 8 9

10 11 12

13 14

15

#include <stdio.h>
int main()
	int n;
	scanf("%d", &n);
	int i,j,num;
	num = 1;
	for (i=0;i<n;i++)
		for (j=0;j<n-i;j++)
			printf("%4d", num);
			num += 1;
		printf("\n");
	return 0;
}

7-125 又来一个上三角数字三角形 (10 分)

输入一个正整数n,输出具有n层的上三角数字三角形。

输入格式:

只有一个正整数n,1<=n<=100。

输出格式:

一个上三角数字三角形,每个数字占四个字符位置。

输入样例:


5


输出样例:


1 6 10 13 15

2 7 11 14

3 8 12

4 9

5

#include <stdio.h>
int main()
	int n;
	scanf("%d", &n);
	int i,j,num;
	for (i=0;i<n;i++)
		num = i+1;
		for (j=0;j<n-i;j++)
			printf("%4d", num);
			num += (n-j);
		printf("\n");
	return 0;
}

7-126 时间差 (10 分)

10点半到11点45之间,有几小时几分钟呢?

你要写一个程序,读入两个时间,计算它们之间的时间差,输出相差几小时几分钟。

输入

输入两个时间,均以24小时制表达,每个时间以“小时:分钟”的形式表达,第二个时间一定比第一个时间晚或相同,而且一定在同一天内。

输出

输出表示两个时间之间的时间差的两个数字,第一个数字是时间差中的小时数,第二个数字是时间差中的分钟数。

输入例子


10:30 11:45


输出例子


1 15

#include <stdio.h>
int main()
    int h1,m1,h2,m2;
    scanf("%d:%d %d:%d", &h1, &m1, &h2, &m2);
    int m=0;
    m = h2 * 60 + m2 - h1 * 60 - m1;
    printf("%d %d", m/60, m%60);
    return 0;
}

7-127 Sum of the digits (6 分)

Given a none-negative number, print out the sum of its digits.

Input Format:

A none-negative integer number.

Output Format:

The sum of its all digits.

Sample Input:

123


Sample Output:


6

#include <stdio.h>
int main()
    int n;
    scanf("%d", &n);
    int sum=0;
    while (n>0)
        sum += n % 10;
        n /= 10;
    printf("%d", sum);
    return 0;
}

7-128 大于m的最小素数 (10 分)

编程求出大于m的最小素数。

输入格式:

直接输入一个正整数

输出格式:

直接输出结果,没有任何附加格式控制。

输入样例:


12


输出样例:


13

#include <stdio.h> 
#include <math.h>
int isPrime(int n)
	int i;
	int isPrime = 1;
	for (i=2;i<=sqrt(n);i++)
		if (n%i==0)
			isPrime = 0;
			break;
	return isPrime;
int main()
	int n;
	scanf("%d", &n);
	int res = n+1;
	while (isPrime(res) == 0) 
		res += 1;
	printf("%d",res);
	return 0;
}

7-129 最佳情侣身高差 (10 分)

专家通过多组情侣研究数据发现,最佳的情侣身高差遵循着一个公式:(女方的身高)\times1.09 =(男方的身高)。如果符合,你俩的身高差不管是牵手、拥抱、接吻,都是最和谐的差度。

下面就请你写个程序,为任意一位用户计算他/她的情侣的最佳身高。

输入格式:

输入第一行给出正整数N(\le 10),为前来查询的用户数。随后N行,每行按照“性别 身高”的格式给出前来查询的用户的性别和身高,其中“性别”为“F”表示女性、“M”表示男性;“身高”为区间 [1.0, 3.0] 之间的实数。

输出格式:

对每一个查询,在一行中为该用户计算出其情侣的最佳身高,保留小数点后2位。

输入样例:


2

M 1.75

F 1.8


输出样例:


1.61

1.96

#include <stdio.h> 
int main()
	int n;
	scanf("%d", &n);
	int i;
	char c;
	float h;
	for (i=0;i<n;i++)
		scanf(" %c %f", &c, &h);
		if (c == 'M')
			printf("%.2f\n", h/1.09);
			printf("%.2f\n", h*1.09);
	return 0;
}

7-130 累加器 (10 分)

请你实现一个累加器。输入n个非负整数,输出他们的和。 1<n<1000,而每个数则<10000。

输入格式:

输入包括两行。 第一行:包括一个整数n,表示总共有n个数。 第二行:包含n个整数。

输出格式:

输出n个数的和。

输入样例:


4

3 2 1 4


输出样例:


10

#include <stdio.h> 
int main()
	int n;
	scanf("%d", &n);
	int x,sum=0;
	int i;
	for (i=0;i<n;i++)
		scanf("%d", &x);
		sum += x;
	printf("%d", sum);
	return 0;
}

7-131 等腰直角三角形 (10 分)

等腰直角三角形是指一个角是直角,且两条直角边相等的三角形。这里我们输出直角边长为n的等腰直角三角形的格式如下所示:

比如n=1,则输出:

<pre>

*

</pre>

n=2,输出:

<pre>

*

**

</pre>

n=3,输出:

<pre>

*

**

***

</pre>

那么,你能用程序来实现么?

输入格式:

输入一个数n,表示三角形的边长。1<n<1000。

输出格式:

输出对应的用*表示的等腰直角三角形。

输入样例:


4


输出样例:


*

**

***

****

#include <stdio.h> 
int main()
	int n;
	scanf("%d", &n);
	int i,j;
	for (i=1;i<=n;i++)
		for (j=0;j<i;j++)
			printf("*");
		printf("\n");
	return 0;
}

7-132 画菱形 (10 分)

菱形是一种特殊的平行四边形,是四条边均相等的平行四边形。题目给出菱形的边长n,用`*`画出菱形。如n=1,输出:


*


n=2,输出:


*

***

*


n=3,输出:


*

***

*****

***

*


那么,你能用程序来实现么?

输入格式:

输入菱形的边长n,1<n<100。

输出格式:

输出对应的用`*`表示的菱形。

输入样例:


4


输出样例:


*

***

*****

*******

*****

***

*

#include <stdio.h>
void printf1(int i, int j)
	int x;
	for (x=0;x<i;x++)
		printf(" ");
	for (x=0;x<j;x++)
		printf("*");
	printf("\n");
int main()
	int n;
	scanf("%d", &n);
	int i;
	for (i=0;i<n;i++)
		printf1(n-i-1,2*i+1);
	for (i=n-1;i>0;i--)
		printf1(n-i,2*i-1);
	return 0;
}

7-133 666 (10 分)

中国人非常喜欢6这个数字,因为大家总爱说66大顺啊。数学狂人李某人喜欢把什么都数字化,于是她把顺利这个词也定义了数量级,6代表1级顺利,66代表2级顺利,666代表3级顺利,以此类推。你看,数学狂人的世界总是让人无法理解。今天,李某人决定将数学进行到底,现在她设前n级顺利的和是sn。


sn=6+66+666+...+66..66(n个6)。


假设你已经知道了数字n,那么,你能帮李某人求出sn么?

输入格式:

输入一个正整数n,n的范围是[0,10)。

输出格式:

输出Sn的值。

输入样例:


2


输出样例:


72

#include <stdio.h>
int main()
	int n;
	scanf("%d", &n);
	int sn = 0;
	int i;
	int num = 0;
	for (i=0;i<n;i++)
		num = num * 10 + 6;
		sn += num;
	printf("%d", sn);
	return 0;
}

7-134 倒顺数字串 (10 分)

输入正整数n,输出它的倒顺数字串。如n=6时,输出


1 2 3 4 5 6 5 4 3 2 1


输入格式:

输入一个正整数n,n的范围是[1,50]。

输出格式:

n的倒顺数字串,每两个数字之间只用一个空格隔开。

输入样例:


6


输出样例:


1 2 3 4 5 6 5 4 3 2 1

#include<stdio.h>
int main()
	int n;
	scanf("%d", &n);
	int i;
	for (i=1;i<=n;i++)
		if (i!=1) printf(" ");
		printf("%d", i);
	for (i=n-1;i>0;i--)
		printf(" %d", i);
	return 0;
}

7-135 数字金字塔 (10 分)

输入正整数n,输出n层数字金字塔。

输入格式:

正整数n,1<=n<=9。

输出格式:

n层的金字塔,其中第1层的“1”在第1行的第39列(列从1开始计数)。

输入样例:


5


输出样例:


1

121

12321

1234321

123454321

#include<stdio.h>
int main()
	int n;
	scanf("%d", &n);
	int i,j,z;
	for (i=1;i<=n;i++)
		for (j=1;j<=39-i;j++) printf(" ");
		for (z=1;z<=i;z++) printf("%d",z);
		for (z=i-1;z>0;z--) printf("%d",z);
		printf("\n");
	return 0;
}

7-136 穷举问题-搬砖 (15 分)

某工地需要搬运砖块,已知男人一人搬`3`块,女人一人搬`2`块,小孩两人搬`1`块。如果想用`n`人正好搬`n`块砖,问有多少种搬法?

输入格式:

输入在一行中给出一个正整数`n`。

输出格式:

输出在每一行显示一种方案,按照"`men = cnt_m, women = cnt_w, child = cnt_c`"的格式,输出男人的数量`cnt_m`,女人的数量`cnt_w`,小孩的数量`cnt_c`。请注意,等号的两侧各有一个空格,逗号的后面也有一个空格。

如果找不到符合条件的方案,则输出"`None`"

输入样例:


45


输出样例:


men = 0, women = 15, child = 30

men = 3, women = 10, child = 32

men = 6, women = 5, child = 34

men = 9, women = 0, child = 36

#include<stdio.h>
int main()
 int n;
 scanf("%d",&n);
 int i,j,k;
 int flag=0;
 for(i=0;i<=n/3;i++)
 for(j=0;j<=n/2;j++)
 for(k=0;k<=n;k+=2)
  if(3*i+2*j+k/2==n&&i+j+k==n)
   flag=1;
   printf("men = %d, women = %d, child = %d\n",i,j,k);
 if(flag==0)
  printf("None\n");
 return 0;
 } 

7-137 Average (10 分)

You are going to read a serial of none-negative integers, which ends with a negative number that does not count as one of the data. Your program calculates the average of all the none-negative integers, and prints the average which rounds to two decimal places.

When there's no valid data at all, your program prints out:

`None`

输入格式:

A serial of none-negative integers, ending with a negative number, which is not one of the valide data.

输出格式:

A number rounds to two decimal places, which is the average of the serial.

The printf for this case is:

`printf("%.2f\n", (double)sum/count);`

输入例子

1 2 3 4 5 6 -1


输出例子


3.50

#include <stdio.h>
int main()
	int num;
	scanf("%d", &num) ;
	int sum=0;
	int cnt=0;
	if (num<0)
		printf("None");
		while (num >= 0)
			sum += num;
			cnt += 1;
			scanf("%d", &num);
		printf("%.2f", (float)sum/cnt);
	return 0;
}

7-138 质因子分解 (10 分)

本题目要求读入一个大于1的整数,编程将其分解成若干个质因子(素数因子)积的形式。

输入格式:

大于1的整数一个。

输出格式:

将输入的正整数分解成若干个质因子积的形式,质因子的出现顺序按从小到大排列。如:30=2\*2\*2\*5;如果整数本身为质数或素数,直接输出,如:13=13。

输入样例:


12480


输出样例:


12480=2*2*2*2*2*2*3*5*13

#include <stdio.h>
int main()
	int n;
	scanf("%d", &n);
	printf("%d=", n);
	int i = 2;
	while (i < n)
		if (n%i == 0)
			printf("%d*", i);
			n /= i;
			i+=1;
	printf("%d", n);
	return 0;
}

7-139 手机话费 (10 分)

小明的手机每天消费1元,每消费K元就可以获赠1元,一开始小明有M元,问最多可以用多少天?
输入格式:
每个测试实例包括2个整数M,K(2<=k<=M<=1000)。
输出格式:
对于每个测试实例输出一个整数,表示M元可以用的天数。
输入样例:
2 2
输出样例:
3

#include <stdio.h>
int main()
	int m,k;
	scanf("%d %d",&m, &k);
	int res=0;
	while (m >= k)
		res += k;
		m = m - k + 1;
	res += m;
	printf("%d", res);
	return 0;
}

7-140 斐波那契数列第n项 (10 分)

输出斐波那契数列第n项(假设n<1000)。斐波那契数列:0,1,1,2,3,5,8,13……
输入格式:
一个正整数n,表示斐波那契数列第n项。
输出格式:
斐波那契数列第n项的值
输入样例:
在这里给出一组输入。例如:
1
输出样例:
在这里给出相应的输出。例如:
0

#include <stdio.h>
int main()
    int n;
    scanf("%d", &n);
    int a=0, b = 1;
    if (n == 1)
    {printf("%d", a);}
    else if (n==2)
    {printf("%d", b);}
        int i,tmp;
        for (i=3;i<=n;i++)
            tmp = b;
            b = a+b;