中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;