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

文章目录


中国大学MOOC浙江大学翁恺老师的《程序设计入门——C语言》2021秋季课程PTA编程练习题【其实每期练习题一致】,共140题,已全部答完,仅三道题借鉴了他人思维之后,全部为独立思考纯手敲代码(Dev-C++调试成功后,复制粘贴到PTA平台),现收集归拢【时间飞逝,存于CSDN草稿箱三年了,现整理格式发布】。

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

在这里插入图片描述

#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 分)

在这里插入图片描述
在这里插入图片描述

#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);
	}
	else
	{
		printf("Fishing in day %d", n);
	}
	return 0;
}

7-73 比较大小 (10 分)

在这里插入图片描述

#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 分)

在这里插入图片描述
在这里插入图片描述

#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);
	}
	else
	{
		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)的值:
在这里插入图片描述

输入格式:

输入在一行中给出实数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;
    }
    else
    {
        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);
	}
	else
	{
		
		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 *
输出样例:

在这里插入图片描述

#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×5×6×7,其中 5、6、7 就是 3 个连续的数字。给定任一正整数 N,要求编写程序求出最长连续因子的个数,并输出最小的连续因子序列。
输入格式:
输入在一行中给出一个正整数 N(1<N<2^{31})。
输出格式:
首先在第 1 行输出最长连续因子的个数;然后在第 2 行中按 因子1*因子2*……*因子k 的格式输出最小的连续因子序列,其中因子按递增顺序输出,1 不算在内。
输入样例:
630
输出样例:
3
567

#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× (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)的值:

在这里插入图片描述

输入格式:
输入在一行中给出实数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;
	}
	else
	{
		res = 1.0/x;
	}
	printf("f(%.1lf) = %.1lf",x,res);
	return 0;
}

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

本题目要求计算下列分段函数f(x)的值:
在这里插入图片描述

注:可在头文件中包含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);
	}
	else
	{
		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;
	}
	else
	{
		res = x * 0.53;
	}
	if (x<0)
	{
		printf("Invalid Value!");
	}
	else
	{
		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;
		}
		else
		{
			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!");
	}
	else
	{
		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×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’) 1060;
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*1N*N的部分口诀表。
输入格式:
输入在一行中给出一个正整数N(1\leN\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);
	}
	else
	{
		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);
	}
	else
	{
		printf("%d=",b);
	}
	if (b==0)
	{
		printf("Error");
	}
	else
	{
		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 分)

在这里插入图片描述

对方不想和你说话,并向你扔了一串数…… 而你必须从这一串数字中找到“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;
	do
	{
		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;
	}
	else
	{
		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);
	}
	else
	{
		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(" ");
					}
					else
					{
						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,如果不清楚正整数的定义的话)。
提示:

  • 对于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。注意,行中可能出现连续的空格;最后的.不计算在内。
输入格式:
输入在一行中给出一行文本,以.结束
提示: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);
	}
	else
	{
		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 分)

根据下面关系式,求圆周率的值,直到最后一项的值小于给定阈值。
在这里插入图片描述
输入格式:
输入在一行中给出小于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 ");
	}
	else
	{
		printf("%d ", a1);
	}
	if (a2==0)
	{
		printf("NONE ");
	}
	else
	{
		printf("%d ", a2);
	}
	if (a3 == 0)
	{
		printf("NONE");
	}
	else
	{
		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;
	}
	else
	{
		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;
		}
		else
		{
			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);
			}
			else
			{
				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);
		}
		else
		{
			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,则输出:

*

n=2,输出:

*
**

n=3,输出:

*

**

***

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

输入格式:

输入一个数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");
	}
	else
	{
		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=2222223513

#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;
		}
		else
		{
			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);}
    else
    {
        int i,tmp;
        for (i=3;i<=n;i++)
        {
            tmp = b;
            b = a+b;
            a = tmp;
        }
        printf("%d", b);
    }
    return 0;
}
  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

raykingl

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

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

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

打赏作者

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

抵扣说明:

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

余额充值