【9】计算球体重量
问题描述
已知铁的比重是7.86(克/立方厘米),金的比重是19.3(克/立方厘米)。写一个程序,分别计算出给定直径的铁球与金球的质量,假定PI=3.1415926输入说明
输入两个整数,分别表示铁球与金球的直径(单位为毫米)输出说明
输出两个浮点数,分别表示铁球与金球的质量(单位为克),小数点后保留3位小数,两个浮点数之间用空格分隔输入样例
100 100输出样例
4115.486 10105.456
#include <stdio.h>
int main(){
double const PI = 3.1415926;
double const a1 = 7.86;
double const b1 = 19.3;
double a, b;
scanf("%lf %lf", &a, &b);
a = 0.1 * a / 2.0;
b = 0.1 * b / 2.0;
double M1 = 4.0 * PI * a * a * a * a1 / 3.0;
double M2 = 4.0 * PI * b * b * b * b1 / 3.0;
printf("%.3f %.3f", M1, M2);
return 0;
}
【10】温度转换
问题描述:
已知华氏温度到摄氏温度的转换公式为:摄氏温度= (华氏温度- 32)×5/9,写程序将给定的华氏温度转换为摄氏温度输出输入说明:
只有一个整数,表示输入的华氏温度输出说明:
输出一个表示摄氏温度的实数,小数点后保留2位有效数字,多余部分四舍五入输入样例:
50输出样例:
10.00
#include <stdio.h>
int main(){
double a;
scanf("%lf", &a);
double b;
b = (a - 32.0) * 5.0 / 9.0;
printf("%.2f", b);
return 0;
}
【11】整数简单运算
问题描述:
编写程序,计算用户输入的两个整数的和、差、乘积(*)和商(/)。输入格式:
输入两个整数,整数之间用空格分隔。输出格式:
输出四个整数结果,分别表示和、差、积和商,每输出一个结果换行。输入样例:
3 4输出样例:
7
-1
12
0
#include <stdio.h>
int main(){
int a , b;
scanf("%d %d", &a, &b);
int x1 = a + b;
int x2 = a - b;
int x3 = a * b;
int x4 = a / b;
printf("%d\n%d\n%d\n%d\n", x1, x2, x3, x4);
return 0;
}
【15】A+B+C
问题描述:
通过键盘输入三个整数a,b,c,求3个整数之和。输入说明:
三整形数据通过键盘输入,输入的数据介于-100000和100000之间,整数之间以空格、跳格或换行分隔。输出说明:
输出3个数的和。输入样例:
-6 0 39输出样例:
33
#include <stdio.h>
int main(){
int a, b, c;
scanf("%d %d %d", &a, &b, &c);
int sum = a + b + c;
printf("%d", sum);
return 0;
}
【16】字符输入输出
问题描述:
通过键盘输入5个大写字母,输出其对应的小写字母,并在末尾加上“!”。输入说明:
5个大写字母通过键盘输入,字母之间以竖线“|”分隔。输出说明:
输出5个大写字母对应的小写字母,之间无分隔,并在末尾加上‘!’。输入样例:
H|E|L|L|O输出样例:
hello!
#include <stdio.h>
int main(){
char a, b, c, d, e;
scanf("%c|%c|%c|%c|%c", &a, &b, &c, &d, &e);
a = a + 'a' - 'A';
b = b + 'a' - 'A';
c = c + 'a' - 'A';
d = d + 'a' - 'A';
e = e + 'a' - 'A';
printf("%c%c%c%c%c!", a, b, c, d, e);
return 0;
}
【18】数字字符
问题描述:
通过键盘输入1个整数a(0<=a<=4),1个数字字符b(’0’<=b<=’5’),求a+b。输入说明:
整形数据、数字字符通过键盘输入,输入的整形数据介于0和4之间,输入的数字字符介于‘0’和‘5’之间,二个输入数之间用“,”分隔。输出说明:
分别以整数形式及字符形式输出a+b,输出的二个数之间用“,”分隔。输入样例:
3,5输出样例:
56,8
#include <stdio.h>
int main(){
int a;
char b;
scanf("%d,%c", &a, &b);
printf("%d,%d", a+b, a+b-48);
return 0;
}
【19】计算长方体体积
问题描述:
通过键盘输入长方体的长、宽、高,求长方体的体积V(单精度)。输入说明:
十进制形式输入长、宽、高,输入数据间用空格分隔。输出说明:
单精度形式输出长方体体积V,保留小数点后3位,左对齐。输入样例:
15 8.12 6.66输出样例:
811.188
#include <stdio.h>
int main(){
float a, b, c;
scanf("%f %f %f", &a, &b, &c);
float V = a*b*c;
printf("%.3f", V);
return 0;
}
【20】四则运算
问题描述:
输入两个整数和一个四则运算符,根据运算符计算并输出其运算结果(和、差、积、商、余之一)。注意做整除及求余运算时,除数不能为零。输入说明:
使用scanf()函数输入两个整数和一个运算符,格式见输入样例。输出说明:
输出使用printf()函数,格式见输出样例。输入样例:
5%2输出样例:
5%2=1
#include <stdio.h>
int main(){
int a, b;
char c;
scanf("%d%c%d", &a, &c, &b);
int x;
if (c == '+') x = a + b;
if (c == '-') x = a - b;
if (c == '*') x = a * b;
if (c == '%') x = a % b;
if (c == '/') x = a / b;
printf("%d%c%d=%d", a, c, b, x);
return 0;
}
【21】数位输出
问题描述:
输入一个5位整数,求出其各数位数值,并按照从高位到低位的顺序输出,如:输入12345,输出为1 2 3 4 5输入说明:
输入一个五位正整数。输出说明:
按数位从高到低依次输出,各数位之间以一个空格相分隔。输入样例:
96237输出样例:
9 6 2 3 7
int x;
scanf("%d", &x);
int x1, x2, x3, x4, x5;
x1 = x/10000;
x2 = x%10000/1000;
x3 = x%1000/100;
x4 = x%100/10;
x5 = x%10;
printf ("%d %d %d %d %d", x1, x2, x3, x4, x5);
【42】整除判断1
问题描述:
判断正整数a能否被b整数,如果不能整除,输出商和余数输入说明:
输入两个正整数a和b(0<a, b<=10000),a和b之间用空格分隔输出说明:
如果a能被b整除,输出yes,否则在同一行输出a除以b的商和余数,商和余数之间用空格分隔输入样例:
17 7输出样例:
2 3
int a, b;
scanf("%d %d", &a, &b);
if(a%b == 0){
printf("yes");
}else{
printf("%d %d", a/b, a%b);
}
【47】冰箱温度预测
问题描述:
编写一个程序,用于预测冰箱断电后经过时间t(以小时为单位)后的温度T。输入说明:
输入两个整数h和m表示冰箱断电后经过的时间,h表示小时,m表示分钟输出说明:
输出冰箱断电后经过时间t(以小时为单位)后的温度T,保留两位小数输入样例:
2 0输出样例:
-16.00
#include <stdio.h>
int main(){
double h, m;
scanf("%lf %lf", &h, &m);
double t = h + m/60.0;
double T = 4.0*t*t/(t+2.0)-20.0;
printf("%.2f", T);
return 0;
}
【48】除法计算器
问题描述:
小明的弟弟刚开始学习除法,为了检查弟弟的计算结果是否正确,小明决定设计一个简单计算器程序来验算。输入说明:
输入数据由四个整数m,n,q,r构成,m为被除数,n为除数,q和r为小明的弟弟计算出的商和余数。整数之间用空格分隔,所有整数取值范围在(-100000~100000),n不为0。输出说明:
如果验算结果正确,输出yes,否则输出正确的商和余数输入样例:
样例1: 10 3 3 1
样例2: 10 3 3 2输出样例:
样例1输出: yes
样例2输出: 3 1
int m, n, q, r;
int q1, r1;
scanf("%d %d %d %d", &m, &n, &q, &r);
q1 = m/n;
r1 = m%n;
if (q==q1 && r==r1){
printf("yes");
}else{
printf("%d %d", q1, r1);
}
【79】求平均值
问题描述:
计算三个整数的平均值,结果保留两位小数。输入说明:
共一行,包含三个整数,整数之间用空格分隔。输出说明:
共一行,输出平均值,结果保留两位小数。输入样例:
20 42 55输出样例:
39.00
int a,b,c;
double avg;
scanf("%d %d %d", &a, &b, &c);
avg = (a+b+c)/3.0;
printf("%.2f", avg);
【89】计算球体的面积
问题描述:
输入球的半径,计算并输出球的体积,假定pi=3.14,结果保留两位小数。输入说明:
共一行,输入球体半径,两位小数。输出说明:
共一行,输出球体体积,结果保留两位小数。输入样例:
5.50输出样例:
696.56
double r;
scanf("%lf", &r);
double pi = 3.14;
double V;
V = 4.0*pi*r*r*r/3.0;
printf("%.2f",V);
【90】求三位整数各位之和
问题描述:
输入一个三位数整数,求其百位、十位和个位数字之和。输入说明:
共一行,输入一个三位整数。输出说明:
共一行,输出一个整数。输入样例:
128输出样例:
11
int x;
scanf("%d", &x);
int x1, x2, x3;
x1 = x/100;
x2 = x%100/10;
x3 = x%10;
printf("%d", x1+x2+x3);
** 【91】求三角形面积
问题描述:
输入三角形的三边长,计算三角形的面积,结果保留两位小数。
边长分别为a,b,c,三角形的面积公式为s=sqrt(p(p-a)(p-b)(p-c)),其中p=(a+b+c)/2。输入说明:
共一行,输入三个数,保留两位小数,用空格隔开各个数据。输出说明:
共一行,输出面积,结果保留两位小数。输入样例:
3.00 4.00 5.00输出样例:
6.00
#include <stdio.h>
#include <math.h>
int main()
{
double a, b, c;
scanf("%lf %lf %lf", &a, &b, &c);
double p, s;
p = (a+b+c)/2;
s = sqrt(p*(p-a)*(p-b)*(p-c));
printf("%.2f",s);
return 0;
}
** 【92】工资发放
问题描述:
公司财务要发工资现金,需要提前换取100元、50元、20元、10元、5元和1元的人民币,
请输入工资数,计算张数最少情况下,各自需要多少张。输入说明:
共一行,输入一个正整数。输出说明:
共一行,分别是100、50、20、10、5、1元面额的张数,用空格隔开各个数据。输入样例:
1258输出样例:
12 1 0 0 1 3
//写法1
int wage;
scanf("%d", &wage);
int a, b, c, d, e, f;
a = wage/100;
b = (wage-a*100)/50;
c = (wage-a*100-b*50)/20;
d = (wage-a*100-b*50-c*20)/10;
e = (wage-a*100-b*50-c*20-d*10)/5;
f = wage-a*100-b*50-c*20-d*10-e*5;
printf("%d %d %d %d %d %d",a,b,c,d,e,f);
//写法2
int main(){
int wage;
scanf("%d", &wage);
int n[6] = {0};
int a[6] = {100, 50, 20, 10, 5, 1};
int i;
for(i=0; i<6; i++){
n[i] = wage/a[i];
wage -= n[i]*a[i];
}
for (i=0; i<6; i++){
printf("%d ", n[i]);
}
//或者
int wage;
scanf("%d", &wage);
int n[6] = {100, 50, 20, 10, 5, 1};
int i, j;
for(i=0; i<6; i++){
j = n[i];
n[i] = wage/j;
wage -= n[i]*j;
}
for (i=0; i<6; i++){
printf("%d ", n[i]);
}
**【100】三角形判别
问题描述:
已知三角形任意两边之和大于第三边,给出三个正整数a,b,c,,请判断能否构成一个三角形,并输出相应结果。输入说明:
输入数据为同一行上的3个整数a,b,c(0 < a,b,c < 1000),整数之间用空格分隔。输出说明:
如果输入的三个整数能够构成一个三角形,输出该三角形周长,否则输出No输入样例:
输入样例1 3 3 2
输入样例2 1 1 5输出样例:
输出样例1 8
输出样例2 No提示:
能够构成一个三角形,输出该三角形周长,否则输出No
//写法一(这个写法太傻逼了我当时为什么会这么写啊!)
#include <stdio.h>
int isT(int a, int b, int c);
int main(){
int a, b, c;
scanf("%d %d %d", &a, &b, &c);
if (isT(a, b, c)){
printf("%d", a+b+c);
}else{
printf("No");
}
return 0;
}
int isT(int a, int b, int c){
int ret = 0;
int t;
t = a;
if (a<b) a=b;
if (a<c) a=c;
if (c>b) c=b;
if (c>t) c=t;
if (b+c>a) ret=1;
return ret;
}
//写法二
#include <stdio.h>
int main(){
int a, b, c;
scanf("%d %d %d", &a, &b, &c);
if ( a+b>c && a+c>b && b+c>a){
int p = a+b+c;
printf("%d", p);
}else{
printf("No");
}
return 0;
}
【110】判断奇偶性
问题描述:
输入一个正整数,判断该数的奇偶性,输出判断的结果(偶数/奇数)。输入说明:
输入一个正整数。输出说明:
输出“偶数”或“奇数”。输入样例:
5输出样例:
奇数
int x;
scanf("%d", &x);
if (x%2 != 0){
printf("奇数");
}else{
printf("偶数");
}
【111】整除判断
问题描述:
输入一个正整数,判断是否能被5和7同时整除,若可以,则输出yes;否则输出no。输入说明:
输入一个正整数。输出说明:
输出“yes”或“no”。输入样例:
35输出样例:
yes
int x;
scanf("%d", &x);
if (x%5 == 0 && x%7 == 0){
printf ("yes");
}else{
printf("no");
}
**【113】出租车计价
题目描述:
编写程序,根据某城市普通出租车收费标准进行车费计算。标准如下:
起步里程为3公里,起步费10元;
超出起步里程后10公里内,每公理2元;
超过10公里以上的部分加收50%的回空补贴费,即每公里3元;
营运过程中,因路阻及乘客要求临时停车等待的,按每5分钟2元计费(不足5分钟不收费)。输入格式:
共一行,包括行驶里程(单位为公里,精确到小数点后1位)与等待时间(整数,单位为分钟),其间以空格分隔输出格式:
在一行中输出乘客应支付的车费(单位为元),结果四舍五入保留整数。输入示例:40.0 7
输出示例: 116
//写法1
double km;
int min;
scanf("%lf %d", &km, &min);
int x;
if (km<=3){
x = 10;
}
if (km<=10 && km > 3){ //注意km需要大于3
x = 10 + (km-3)*2 + 0.5; //+0.5用于四舍五入
}
if (km>10){
x = 24 + (km-10)*3 + 0.5;
}
if (min>=5){
x = x + min/5*2;
}
printf("%d", x);
四舍五入:类型转换时会向下取整,因此可以通过+0.5的形式完成四舍五入
//写法2(利用浮点数:保留小数时会自动进行四舍五入)
double a;
int b;
scanf("%lf %d", &a, &b);
double x;
if (a<=3) x = 10.0;
if (a>3 && a<=10) x = 10.0 + (a-3.0)*2.0;
if (a>10) x = 24.0 + (a-10.0)*3.0;
if (b>=5) x += b/5*2;
printf("%.0f", x);
【125】利率计算
题目描述:
假如我国国民生产总值的年增长率为9%,计算10年后我国国民总值与现在相比增长多少百分比。计算公式为 p=(1+r)^n
r为增长率,n为年数,p为与现在相比的倍数。
输入说明:
输入两个浮点数,分别表示年增长率和年数,两个浮点数之间用空格分隔。
输出说明:
输出一个浮点数,表示与现在相比的倍数,小数点后保留2位小数。
输入样例:
0.09 10
输出样例:
2.37
//写法1
double r, n;
scanf("%lf %lf", &r, &n);
double p = 1.0;
int i;
for (i=0; i<n; i++){
p = p * (1.0 + r);
}
printf("%.2f",p);
//写法2
#include <stdio.h>
#include <math.h>
int main(){
double r, n;
scanf("%lf %lf", &r, &n);
printf("%.2f", pow((1.0+r),n));
return 0;
}
【126】购房贷款计算
问题描述:
购房从银行贷了一笔款d,准备每月还款额为P,月利率为r,计算多少月能还清。(设d为300000元,p为6000元,r为1%,对求得的月份取小数点后一位,对第2位按四舍五入处理)提示:计算还清月数m的公式如下:
也可以将公式改写为:
输入说明:
输入三个浮点数,分别表示贷款,每月还款额与月利率,三个浮点数之间用空格分隔。输出说明:
输出以个浮点数,表示还清贷款的月数,小数点后保留2位小数。输入样例:
300000 6000 0.01输出样例:
69.66
#include <stdio.h>
#include<math.h>
int main(){
double d, p, r;
scanf("%lf %lf %lf", &d, &p, &r);
double m = log(p/(p-d*r))/log(1+r);
printf("%.2f", m);
return 0;
}
【139】字符加密
问题描述:
请编程序将“China”译成密码,密码规律是:用原来字母后面第四个字母代替原来的字母。例如“A”后面的第四个字母是“E”,用“E”代替“A”,因此,“China”应译为“Glmre”。输入说明:
用赋初值的方法使c1,c2,c3,c4,c5这五个变量的值分别为‘C’,‘h’,‘i’‘n’,‘a’,字符之间以空格分隔。输出说明:
经过运算,使c1,c2,c3,c4,c5分别变成‘G’,‘l’,‘m’,‘r’,‘e’。用printf函数输出这五个字符输入样例:
C h I n a输出样例:
Glmre
char c1, c2, c3, c4, c5;
scanf ("%c %c %c %c %c", &c1, &c2, &c3, &c4, &c5);
c1 += 4;
c2 += 4;
c3 += 4;
c4 += 4;
c5 += 4;
printf("%c%c%c%c%c", c1, c2, c3, c4, c5);
【2】数列分段
问题描述
给定一个整数数列,数列中连续相同的最长整数序列算成一段,问数列中共有多少段?输入格式
输入的第一行包含一个整数n,表示数列中整数的个数。
第二行包含n个整数a1, a2, …, an,表示给定的数列,相邻的整数之间用一个空格分隔。输出格式
输出一个整数,表示给定的数列有多个段。样例输入
8
8 8 8 0 12 12 8 0样例输出
5样例说明
8 8 8是第一段,0是第二段,12 12是第三段,倒数第二个整数8是第四段,最后一个0是第五段。评测用例规模与约定
1 ≤ n ≤ 1000,0 ≤ ai ≤ 1000。
int n;
scanf("%d", &n);
int a[n];
int i;
for (i=0; i<n-1; i++){
scanf("%d ", &a[i]);
}
scanf("%d", &a[i]);
int cnt = 1;
for (i=0; i<n-1; i++){
if (a[i] != a[i+1]){
cnt++;
}
}
printf("%d", cnt);
【3】最小差值
问题描述
给定n个数,请找出其中相差(差的绝对值)最小的两个数,输出它们的差值的绝对值。输入格式
输入第一行包含一个整数n。
第二行包含n个正整数,相邻整数之间使用一个空格分隔。输出格式
输出一个整数,表示答案。样例输入
5
1 5 4 8 20样例输出
1样例说明
相差最小的两个数是5和4,它们之间的差值是1。样例输入
5
9 3 6 1 3样例输出
0样例说明
有两个相同的数3,它们之间的差值是0.数据规模和约定
对于所有评测用例,2 ≤ n ≤ 1000,每个给定的整数都是不超过10000的正整数。
#include <stdio.h>
#include <math.h>
int main(){
int n;
scanf("%d", &n);
int a[n];
int i;
for (i=0; i<n; i++){
scanf("%d", &a[i]);
}
int min = abs(a[1]-a[0]);
int j;
for (i=0; i<n; i++){
for (j=i+1; j<n; j++){
if (min>abs(a[j]-a[i])) min=abs(a[j]-a[i]);
}
}
printf("%d", min);
return 0;
}
【7】车牌限行
问题描述
受雾霾天气影响,某市决定当雾霾指数超过设定值时对车辆进行限行,假设车牌号全为数字,且长度不超过6位,限行规则如下:
(1)限行时间段只包括周一至周五,周六周日不限行;
(2)如果雾霾指数低于200,不限行;
(3)如果雾霾指数大于等于200且低于400,每天限行两个尾号的汽车,周一限行1和6,周二限行2和7,周三限行3和8,周四限行4和9,周五限行5和0;
(4)如果雾霾指数大于等于400,每天限行五个尾号的汽车,周一、周三和周五限行1,3,5,7,9,周二和周四限行0,2,4,6,8。现在给出星期几、雾霾指数和车牌号,判断该车牌号是否限行。
输入说明
输入分为三个整数,第一个整数表示星期几(1~7,1表示周一,2表示周二,依次类推,7表示周日),
第二个整数表示雾霾指数(0~600),第三个整数表示车牌号,整数之间用空格分隔。输出说明
输出为两个部分,第一部分为车牌最后一位数字,第二部分为限行情况,限行输出yes,不限行输出no。输入样例
输入样例1
4 230 80801
输入样例2
3 300 67008输出样例
输出样例1
1 no
输出样例2
8 yes
//写法1(其实最好别用goto吧)
#include <stdio.h>
int main(){
int a, b, c;
scanf("%d %d %d", &a, &b, &c);
int d = c % 10;
if (a == 6 || a == 7) goto out1;
if (b>=200 && b<400 && a==1 && (d==1 || d==6)) goto out2;
if (b>=200 && b<400 && a==2 && (d==2 || d==7)) goto out2;
if (b>=200 && b<400 && a==3 && (d==3 || d==8)) goto out2;
if (b>=200 && b<400 && a==4 && (d==4 || d==9)) goto out2;
if (b>=200 && b<400 && a==5 && (d==5 || d==0)) goto out2;
if (b>400 && (a==1 || a==3 || a==5) && (d==1 || d==3 || d==5 || d==7|| d==9)) goto out2;
if (b>400 && (a==2 || a==4) && (d==0 || d==2 || d==4 || d==6|| d==8)) goto out2;
out1:
printf("%d no", d); goto out;
out2:
printf("%d yes", d);
out:
return 0;
}
//写法2(if嵌套 单一出口原则)
int a, b, c;
scanf("%d %d %d", &a, &b, &c);
int d = c % 10;
int ban = 0;
if (a !=6 && a != 7){
if (b>=200 && b<400){
if (a==1 && (b==1 || d==6)) ban = 1;
if (a==2 && (d==2 || d==7)) ban = 1;
if (a==3 && (d==3 || d==8)) ban = 1;
if (a==4 && (d==4 || d==9)) ban = 1;
if (a==5 && (d==5 || d==0)) ban = 1;
}else if (b>400){
if ((a==1 || a==3 || a==5) && (d==1 || d==3 || d==5 || d==7|| d==9)) ban = 1;
if ((a==2 || a==4) && (d==0 || d==2 || d==4 || d==6|| d==8)) ban = 1;
}
}
if (ban==0) printf("%d no", d);
if (ban==1) printf("%d yes", d);
//写法3(if并列 单一出口原则)
#include <stdio.h>
int main(){
int a, b, c;
scanf("%d %d %d", &a, &b, &c);
int d = c % 10;
int ban = 0;
if (b>=200 && b<400 && a==1 && (d==1 || d==6)) ban = 1;
if (b>=200 && b<400 && a==2 && (d==2 || d==7)) ban = 1;
if (b>=200 && b<400 && a==3 && (d==3 || d==8)) ban = 1;
if (b>=200 && b<400 && a==4 && (d==4 || d==9)) ban = 1;
if (b>=200 && b<400 && a==5 && (d==5 || d==0)) ban = 1;
if (b>400 && (a==1 || a==3 || a==5) && (d==1 || d==3 || d==5 || d==7|| d==9)) ban = 1;
if (b>400 && (a==2 || a==4) && (d==0 || d==2 || d==4 || d==6|| d==8)) ban = 1;
ban==1 ?printf("%d yes", d) :printf("%d no", d);
return 0;
}
【27】阶梯电价1
问题描述:
电价分三个档次,[0,110]度电,每度电0.5元;(110,210]度电,超出110部分每度电0.55元,超过210度电,超出210部分每度电0.70元,给出一个家庭一月用电量,请计算出应缴的电费(四舍五入,保留小数点后两位小数)。输入说明:
输入数据为一个正实数,表示一月用电量输出说明:
输出应缴电费,四舍五入保留2位小数。输入样例:
输入样例1 100
输入样例2 200
输入样例3 329.75输出样例:
输出样例1 50.00
输出样例2 104.50
输出样例3 193.82
double x, y;
scanf("%lf", &x);
if (x<=110){
y = x * 0.5;
} else if(x<=210){
y = 55.0 + (x-110)*0.55;
}else{
y = 110.0 + (x-210)*0.7;
}
printf("%.2f", y);
【28】计算某月天数
问题描述:
每年的1,3,5,7,8,10,12月有31天,4,6,9,11月有30天,闰年2月29天,其他年份2月28天,给定年份和月份求该月的天数输入说明:
输入由两个正整数a和b构成,a表示年份,b表示月份,a和b之间用空格分隔输出说明:
根据年份和月份计算该月天数并输出输入样例
输入样例1 2000 3
输入样例2 2001 2输出样例
输出样例1 31
输出样例2 28
int a, b;
scanf("%d %d", &a, &b);
int day = 28;
if ((a%100 != 0 && a%4 == 0 || a%400 == 0) && b == 2) day = 29;
if (b==1 || b==3 || b==5 || b==7 || b==8 || b==10 || b==12) day=31;
if (b==4 || b==6 || b==9 || b==11) day = 30;
printf("%d", day);
***【29】计算整数各位数字之和
问题描述:
假设n是一个由最多9位数字(d9, …, d1)组成的正整数。编写一个程序计算n的每一位数字之和输入说明:
输入数据为一个正整数n输出说明:
对整数n输出它的各位数字之和后换行输入样例:
3704输出样例:
14
#include <stdio.h>
int main(){
int n;
scanf("%d", &n);
int sum = 0;
while (n>0){
sum += n%10;
n/=10;
}
printf("%d\n", sum);
return 0;
}
***【30】完数
问题描述:
请写一个程序,给出指定整数范围[a,b]内的所有完数,0 < a < b < 10000。
一个数如果恰好等于除它本身外的所有因子之和,这个数就称为"完数"。
例如6是完数,因为6=1+2+3输入说明
输入为两个整数a和b,a和b之间用空格分隔输出说明
输出[a,b]内的所有完数,每个数字占一行输入样例
1 10输出样例
6
#include <stdio.h>
int main(){
int a, b;
scanf("%d %d", &a, &b);
int i, j;
int sum;
for (i=a; i<=b; i++){
sum = 0;
for(j=1; j<i; j++){
if(i%j==0) sum+=j;
}
if(sum==i) printf("%d\n",i);
}
return 0;
}
***【31】最大公约数
问题描述:
最大公约数(GCD)指某几个整数共有因子中最大的一个,最大公约数具有如下性质,
gcd(a,0)=a gcd(a,1)=1
因此当两个数中有一个为0时,gcd是不为0的那个整数;当两个整数互质时最大公约数为1。
输入两个整数a和b,求最大公约数输入说明:
输入为两个非负整数a和b(0<=a,b<10000),a和b之间用空格分隔,输出说明:
输出其最大公约数输入样例:
样例1输入
2 4
样例2输入:
12 6
样例3输入:
3 5
输出样例:
样例1输出
2
样例2输出
6
样例3输出
1
//写法1(感觉这样写还可以)
#include <stdio.h>
int main(){
int a, b;
scanf("%d %d", &a, &b);
int t;
if (a>b){
t = a;
a = b;
b = t;
}
int i;
int gcd = b;
for(i=a; i>=1; i--){
if(a%i==0 && b%i==0){
gcd = i;
break;
}
}
printf("%d", gcd);
return 0;
}
//写法2:辗转相除法(写的时候觉得有点绕 考试还是不要写这个比较好)
#include <stdio.h>
int main(){
int a, b;
scanf("%d %d", &a, &b);
int gcd;
if (b != 0){
int t = a % b;
gcd = b;
while (t != 0){
a = b;
b = t;
t = a % b;
gcd = b;
}
}else gcd = a;
printf("%d", gcd);
return 0;
}
【32】角谷定理
问题描述:
角谷定理定义如下:对于一个大于1的整数n,如果n是偶数,则n = n / 2。如果n是奇数,则n = 3 * n +1,反复操作后,n一定为1。
例如输入22的变化过程: 22 ->11 -> 34 -> 17 -> 52 -> 26 -> 13 -> 40 -> 20 -> 10 -> 5 -> 16 -> 8 -> 4 -> 2 -> 1,数据变化次数为15。
输入一个大于1的整数,求经过多少次变化可得到自然数1。输入说明
输入为一个整数n,1<n<100000。输出说明
输出变为1需要的次数输入样例
样例1输入
22
样例2输入
33输出样例
样例1输出
15
样例2输出
26
int n;
scanf("%d", &n);
int cnt = 0;
for(cnt=0; n!=1; cnt++){
if(n%2==0){
n=n/2;
}else{
n=3*n+1;
}
}
printf("%d",cnt);
【41】PM2.5
问题描述
给出一组PM2.5数据,按以下分级标准统计各级天气的天数,并计算出PM2.5平均值。
PM2.5分级标准为:
一级优(0<=PM2.5<=50)
二级良(51<=PM2.5<=100为)
三级轻度污染(101<=PM2.5<=150)
四级中度污染(151<=PM2.5<=200)
五级重度污染(201<=PM2.5<=300)
六级严重污染(PM2.5>300)
输入说明
输入分为两行,
第一行是一个整数n表示天数(1<n<=100);
第二行为n个非负整数Pi(0<=Pi<=1000),表示每天的PM2.5值,整数之间用空格分隔。输出说明
输出两行数据,
第一行为PM2.5平均值,结果保留2位小数;
第二行依次输出一级优,二级良,三级轻度污染,四级中度污染,五级重度污染,六级严重污染的天数。输入样例
10
50 100 120 80 200 350 400 220 180 165输出样例
186.50
1 2 1 3 1 2
//写法1
#include <stdio.h>
int main(){
int n;
scanf("%d\n", &n);
double pi[n];
int i;
for (i=0; i<n; i++){
scanf("%lf",&pi[i]);
if (i<n-1) scanf(" ");
}
double sum = 0;
for (i=0; i<n; i++){
sum = sum + pi[i];
}
double avg = sum / n;
int day1=0, day2=0, day3=0, day4=0, day5=0, day6=0;
for (i=0; i<n; i++){
if (pi[i]<=50) day1++;
if (pi[i]>=51 && pi[i]<=100) day2++;
if (pi[i]>=101 && pi[i]<=150) day3++;
if (pi[i]>=151 && pi[i]<=200) day4++;
if (pi[i]>=201 && pi[i]<=300) day5++;
if (pi[i]>300) day6++;
}
printf("%.2f\n%d %d %d %d %d %d", avg, day1, day2, day3, day4, day5, day6);
return 0;
}
//写法2
#include <stdio.h>
int main(){
int n;
scanf("%d", &n);
int a[n];
int b[6] = {0};
int i;
double sum = 0;
for(i=0; i<n; i++){
scanf("%d", &a[i]);
sum+=a[i];
if (a[i]>=0 && a[i]<=50) b[0]++;
if (a[i]>=51 && a[i]<=100) b[1]++;
if (a[i]>=101 && a[i]<=150) b[2]++;
if (a[i]>=151 && a[i]<=200) b[3]++;
if (a[i]>=201 && a[i]<=300) b[4]++;
if (a[i]>300) b[5]++;
}
printf("%.2f\n", sum/n);
for(i=0;i<6;i++){
printf("%d ", b[i]);
}
return 0;
}
***【43】整数分析
问题描述
给出一个整数n(0<=n<=100000000)。求出该整数的位数,以及组成该整数的所有数字中的最大数字和最小数字。输入说明
输入一个整数n(0<=n<=100000000)输出说明
在一行上依次输出整数n的位数,以及组成该整数的所有数字中的最大数字和最小数字,各个数字之间用空格分隔。输入样例
217输出样例
3 7 1
//写法1
#include <stdio.h>
int main(){
int n;
scanf("%d", &n);
int mask, cnt;
mask = n;
for (cnt=1; mask>9; cnt++){
mask = mask / 10;
}
int i = 1, j = 1;
for( ; i<cnt; i++){
j *= 10;
}
int min=n/j, max=n/j, t;
if (n%10 == 0) min = 0;
while(n>0){
if (max<n/j) max = n/j;
if (min>n/j) min = n/j;
n=n%j;
j/=10;
}
printf("%d %d %d", cnt, max, min);
return 0;
}
//写法2
#include <stdio.h>
int main(){
int n;
scanf("%d", &n);
int cnt = 0;
int k = n % 10;
int max=k, min=k;
if (n==0) cnt = 1;
while (n!=0){
k = n % 10;
n /= 10;
cnt++;
if (max<k) max = k;
if (min>k) min = k;
}
printf("%d %d %d", cnt, max, min);
return 0;
}
【45】气温波动
问题描述
最近一段时间气温波动较大。已知连续若干天的气温,请给出这几天气温的最大波动值是多少,即在这几天中某天气温与前一天气温之差的绝对值最大是多少。
输入说明
输入数据分为两行。
第一行包含了一个整数n,表示给出了连续n天的气温值,2 ≤ n ≤ 30。
第二行包含n个整数,依次表示每天的气温,气温为-20到40之间的整数。输出说明
输出一个整数,表示气温在这n天中的最大波动值。输入样例
6
2 5 5 7 -3 5输出样例
10
// 写法1
#include <stdio.h>
#include<math.h>
int main(){
int n;
scanf ("%d\n", &n);
int c[n];
int i;
for (i=0; i<n; i++){
scanf ("%d", &c[i]);
if (i<n-1) scanf(" ");
}
int max=0;
for (i=0; i<n-1; i++){
if (max<abs(c[i+1]-c[i])) max = abs(c[i+1]-c[i]);
}
printf("%d", max);
return 0;
}
//写法2
#include <stdio.h>
#include <math.h>
int main(){
int n;
scanf("%d", &n);
int a[n];
int i, j;
int max = 0;
for(i=0; i<n; i++){
scanf("%d", &a[i]);
for(j=i-1; j<i && j>=0; j++){
if (max<abs(a[i]-a[j])) max = abs(a[i]-a[j]);
}
}
printf("%d", max);
return 0;
}
【46】折点计算
问题描述
给定n个整数表示一个商店连续n天的销售量。如果某天之前销售量在增长,而后一天销售量减少,则称这一天为折点,反过来如果之前销售量减少而后一天销售量增长,也称这一天为折点,其他的天都不是折点。如图所示,第3天和第6天是折点。
给定n个整数a1, a2, …, an表示连续n天中每天的销售量。请计算出这些天总共有多少个折点。
输入说明
输入的第一行包含一个整数n。
第二行包含n个整数,用空格分隔,分别表示a1, a2, …, an。
3 ≤ n ≤ 100,每天的销售量是不超过1000的非负整数。为了减少歧义,输入数据保证:在这n天中相邻两天的销售量总是不同的,即ai-1≠ai。输出说明
输出一个整数,表示折点数量。输入样例
7
5 4 1 2 3 6 4输出样例
2
#include <stdio.h>
int main(){
int n;
scanf("%d\n", &n);
int a[n];
int i;
for(i=0; i<n; i++){
scanf("%d", &a[i]);
if (i<n-1) scanf(" ");
}
int trend = 0, cnt = 0;
if (a[1]>a[0]) trend=1;
for (i=1; i<n-1; i++){
if (a[i+1]>a[i]){
if(trend != 1){
cnt++;
trend = 1;
}
}else if(trend != 0){
cnt++;
trend = 0;
}
}
printf("%d", cnt);
return 0;
}
【49】完全平方数
问题描述
若一个整数n能表示成某个整数m的平方的形式,则称这个数为完全平方数。写一个程序判断输入的整数是不是完全平方数。输入说明
输入数据为一个整数n,0<=n<10000000。输出说明
如果n是完全平方数,则输出构成这个完全平方数的整数m,否则输出no。输入样例
样例1:
144
样例2:
15输出样例
样例1输出:
12
样例2输出:
no
//写法1
#include <stdio.h>
int main(){
long long n;
scanf("%ld", &n);
long long m = n / 2;
if (n == 1) m = 1;
if (m * m != n){
while (m*m > n){
m = m / 2;
}
}
long long i;
int ret = 0;
for (i=m; i<=2*m; i++){
if (i*i == n){
ret = 1;
break;
}
}
if (ret) printf("%d", i);
else printf("no");
return 0;
}
//写法2
#include <stdio.h>
int main(){
int n;
scanf("%d", &n);
int i;
int ret = 0;
for(i=0; i<=n; i++){
if (i*i == n){
ret = 1;
break;
}
}
if (ret) printf("%d", i);
else printf("no");
return 0;
}
***【50】选号程序
问题描述
小明决定申请一个新的QQ号码,系统随机生成了若干个号码供他选择。小明的选号原则是:
1. 选择所有号码中各位数字之和最大的号码。
2. 如果有多个号码各位数字之和相同则选择数值最大的号码。
请你写一个程序帮助小明选择一个QQ号码。输入说明
输入数据由两行构成,第一行为一个整数n表示有n个待选号码(0<n<100),第二行有n个正整数,表示各个待选的号码,每个号码长度不超过9位数。每个号码之间用空格分隔,且每个号码都不相同。输出说明
输出根据小明的选号原则选出的号码。输入样例
5
10000 11111 22222 333 1234输出样例
22222
//写法1
#include <stdio.h>
int main(){
int n;
scanf("%d\n", &n);
int const q[n];
int i;
for(i=0; i<n; i++){
scanf("%d", &q[i]);
}
int s[n];
for(i=0; i<n; i++){
int mask, m;
mask = q[i];
for (m=0; mask>0; m++){
mask /= 10;
}
int k = 10;
while(m>1){
k *= 10;
m -= 1;
}
mask = q[i];
s[i] = 0;
while(k>0){
s[i] += mask/k;
mask %= k;
k /= 10;
}
}
int max = 0;
for(i=1; i<n; i++){
if (s[max] < s[i]) max = i;
if (s[max] == s[i] && q[max] < q[i]) max = i;
}
printf("%d", q[max]);
return 0;
}
//写法2
#include <stdio.h>
int main(){
int n;
scanf("%d", &n);
int a[n];
int i;
for (i=0; i<n; i++){
scanf("%d", &a[i]);
}
int b[n];
int k;
for (i=0; i<n; i++){
b[i] = 0;
k = a[i];
while (k>0){
b[i] += k % 10;
k /= 10;
}
}
int max = 0;
for (i=1; i<n; i++){
if (b[max] < b[i] || (b[max]==b[i] && a[max]<a[i])){
max = i;
}
}
printf("%d", a[max]);
return 0;
}
【51】寻找最大整数
问题描述
从键盘输入四个整数,找出其中的最大值并将其输出。输入说明
输入4个整数,用空格分隔输出说明
输出值最大的一个整数输入样例
25 99 -46 0输出样例
99
//写法1
#include <stdio.h>
int max(int a[], int length);
int main(){
int a[4];
scanf("%d %d %d %d", &a[0], &a[1], &a[2], &a[3]);
printf("%d", max(a, 4));
return 0;
}
int max(int a[], int length){
int ret = a[0];
int i;
for (i=0; i<length; i++){
if (ret<a[i]) ret = a[i];
}
return ret;
}
//写法2
#include <stdio.h>
int main(){
int a, b, c, d;
scanf("%d %d %d %d", &a, &b, &c, &d);
int max = a;
if (max<b) max = b;
if (max<c) max = c;
if (max<d) max = d;
printf("%d", max);
return 0;
}
【52】字符处理
问题描述
从键盘输入一个字符,若为小写字母,则输出其对应的大写字母;若为大写字母,则输出对应的小写字母;其他字符原样输出。输入说明
输入一个字符输出说明
输出一个字符输入样例
样例1输入
a
样例2输入
B
样例3输入
2输出样例
样例1输出
A
样例2输出
b
样例3输出
2
char x;
scanf("%c", &x);
if (x>=65 && x<=90) x = x + 'a' - 'A';
if (x>=97 && x<=122) x = x + 'A' - 'a';
printf("%c", x);
【53】成绩分级1
问题描述
给出一个百分制的成绩,要求输出成绩等级'A','B','C','D','E'。90分以上为'A',80~89分为'B',70~79分为'C',60~69分为'D',60分以下为'E'。输入说明
输入一个正整数m(0<=m<=100)输出说明
输出一个字符输入样例
59输出样例
E
char lev;
int gpa;
scanf("%d", &gpa);
if (gpa>=90) lev = 'A';
if (gpa>=80 && gpa<=89) lev = 'B';
if (gpa>=70 && gpa<=79) lev = 'C';
if (gpa>=60 && gpa<=69) lev = 'D';
if (gpa<60) lev = 'E';
printf("%c", lev);
【54】abc组合
问题描述
已知abc+cba=n,其中a,b,c均为一位数,1000<n<2000,编程求出满足条件的a,b,c所有组合输入说明
一个整数n输出说明
按照整数abc从小到大的顺序,输出a, b, c, 用空格分隔,每输出一组a,b,c后换行输入样例
1352输出样例
3 7 9
4 7 8
5 7 7
6 7 6
7 7 5
8 7 4
9 7 3
int n;
scanf("%d", &n);
int a, b, c;
for (a=0; a<10; a++){
for (b=0; b<10; b++){
for (c=0; c<10; c++){
if (a*100+b*10*2+c*100+a+c == n){
printf("%d %d %d\n", a, b, c);
}
}
}
}
【56】直角三角形判断
问题描述
设直角三角形两条直角边长度为a和b,斜边长度为c,则a,b,c满足a^2+b^2=c^2,
输入三个整数a,b,c,判断对应的三角形是不是直角三角形,不是则输出“no”,是则输出其面积的2倍。输入说明
数据由同一行的三个整数a,b,c构成,整数之间以空格分隔输出说明
如果输入的三个整数可以构成一个直角三角形,则输出一个整数表示该三角形面积的2倍;否则输出“no”输入样例
样例1输入
1 1 2
样例2输入
3 4 5输出样例
样例1输出
no
样例2输出
12
int a, b, c;
scanf("%d %d %d", &a, &b, &c);
int t = c;
if (c<a){
c = a;
a = t;
}
if (c<b){
c = b;
b = t;
}
if (a*a + b*b == c*c){
printf("%d", a*b);
}else{
printf("no");
}
【63】工资计算
问题描述
小明的公司每个月给小明发工资,而小明拿到的工资为交完个人所得税之后的工资。假设他一个月的税前工资为S元,则他应交的个人所得税按如下公式计算:
1)个人所得税起征点为3500元,若S不超过3500,则不交税,3500元以上的部分才计算个人所得税,令A=S-3500元;
2)A中不超过1500元的部分,税率3%
3)A中超过1500元未超过4500元的部分,税率10%
4)A中超过4500元未超过9000元的部分,税率20%
5)A中超过9000元未超过35000元的部分,税率25%
6)A中超过35000元的部分,税率30%
例如,如果小明的税前工资为10000元,则A=10000-3500=6500元,其中不超过1500元部分应缴税1500×3%=45元,超过1500元不超过4500元部分应缴税(4500-1500)×10%=300元,超过4500元部分应缴税(6500-4500)×20%=400元。总共缴税745元,税后所得为9255元。已知小明这个月税前所得为S元,请问他的税后工资T是多少元。输入格式
输入为一个整数S,表示小明的税前工资。所有评测数据保证小明的税前工资为一个整百的数。输出格式
输出一个整数T,表示小明的税后工资。样例输入
10000样例输出
9255评测用例规模与约定
对于所有评测用例,1 ≤ T ≤ 100000。
int s;
scanf("%d", &s);
int tax;
int plus = s - 3500;
if (plus>0){
if (plus<=1500) tax = plus*0.03;
if (plus>1500 && plus<=4500) tax = 1500*0.03 + (plus - 1500)*0.1;
if (plus>4500 && plus<=9000) tax = 1500*0.03 +3000*0.1+(plus-4500)*0.2;
if (plus>9000 && plus<=35000) tax = 1500*0.03 +3000*0.1 + 4500*0.2 + (plus-9000)*0.25;
if (plus>35000) tax = 1500*0.03 + 3000*0.1 + 4500*0.2 +26000*0.25 + (plus-35000)*0.3;
}else tax = 0;
s = s - tax;
printf("%d", s);
【64】自然数分解
问题描述
任何一个自然数 m 的立方均可写成 m 个连续奇数之和。例如:
编程实现:输入一自然数n,求组成 n^3的n个连续奇数。
输入说明
一个正整数n,0<n<30输出说明
输出n个连续奇数,数据之间用空格隔开,并换行输入样例
4输出样例
13 15 17 19
#include <stdio.h>
int sum(int a[], int length);
int main(){
int n;
scanf("%d", &n);
int a[n];
a[0] = 1;
int i;
for (i=1; i<n; i++){
a[i] = a[i-1]+2;
}
while (sum(a, n) != n*n*n){
for (i=0; i<n; i++){
a[i] += 2;
}
}
for(i=0; i<n; i++){
printf("%d ", a[i]);
}
return 0;
}
int sum(int a[], int length){
int ret = 0;
int i;
for (i=0; i<length; i++){
ret += a[i];
}
return ret;
}
【66】平均数
问题描述
计算n个整数(x1,x2,x3...)的平均数,结果保留两位小数。输入说明
第一行为整数n(1 <= n <=100),接下来是n个整数(0 <= x1,x2,x3....<= 2^31 - 1)。输出说明
输出这n个整数的平均数,结果保留两位小数。输入样例
5
2 3 1 4 5输出样例
3.00
#include <stdio.h>
int main(){
int n;
scanf("%d", &n);
int a[n];
int i;
for(i=0; i<n; i++){
scanf("%d", &a[i]);
}
double avg = 0.0;
for (i=0; i<n; i++){
avg += a[i];
}
avg /= n;
printf("%.2f", avg);
return 0;
}
【68】日期计算
问题描述
给定一个年份y和一个整数d,问这一年的第d天是几月几日?
注意闰年的2月有29天,且满足下面条件之一的是闰年:
1) 年份是4的整数倍,而且不是100的整数倍;
2) 年份是400的整数倍输入说明
输入包含两个整数y和d,y表示年份,年份在1900到2018之间(包含1900和2018)。 d表示这一年的第几天,d在1至365之间。输出说明
在一行输出两个整数,分别表示答案的月份和日期。输入样例
2015 80输出样例
3 21
#include <stdio.h>
void date1 (int d, int *month, int *day);
void date2 (int d, int *month, int *day);
int main(){
int y, d;
scanf("%d %d", &y, &d);
int month, day;
if (y != 1900 && y%4 == 0){
date2(d, &month, &day);
}else{
date1(d, &month, &day);
}
printf("%d %d", month, day);
return 0;
}
void date1 (int d, int *month, int *day){
if (d<=31){
*month = 1;
*day = d;
}
if (d>31 && d<=59){
*month = 2;
*day = d-31;
}
if (d>59 && d<=90){
*month = 3;
*day = d-59;
}
if (d>90 && d<=120){
*month = 4;
*day = d-90;
}
if (d>120 && d<=151){
*month = 5;
*day = d-120;
}
if (d>151 && d<=181){
*month = 6;
*day = d-151;
}
if (d>181 && d<=212){
*month = 7;
*day = d-181;
}
if (d>212 && d<=243){
*month = 8;
*day = d-212;
}
if (d>243 && d<=273){
*month = 9;
*day = d-243;
}
if (d>273 && d<=304){
*month = 10;
*day = d-273;
}
if (d>304 && d<=334){
*month = 11;
*day = d-304;
}
if (d>334 && d<=365){
*month = 12;
*day = d-334;
}
}
void date2 (int d, int *month, int *day){
if (d<=31){
*month = 1;
*day = d;
}
if (d>31 && d<=60){
*month = 2;
*day = d-31;
}
if (d>60 && d<=91){
*month = 3;
*day = d-60;
}
if (d>91 && d<=121){
*month = 4;
*day = d-91;
}
if (d>121 && d<=152){
*month = 5;
*day = d-121;
}
if (d>152 && d<=182){
*month = 6;
*day = d-152;
}
if (d>182 && d<=213){
*month = 7;
*day = d-182;
}
if (d>213 && d<=244){
*month = 8;
*day = d-213;
}
if (d>244 && d<=274){
*month = 9;
*day = d-244;
}
if (d>274 && d<=305){
*month = 10;
*day = d-274;
}
if (d>305 && d<=335){
*month = 11;
*day = d-305;
}
if (d>335 && d<=366){
*month = 12;
*day = d-335;
}
}
【87】跳一跳
问题描述
跳一跳是一款微信小游戏,游戏规则非常简单,只需玩家要从一个方块跳到下一个方块,如果未能成功跳到下一个方块则游戏结束。
计分规则如下:
1. 如果成功跳到下一个方块上,但未跳到方块中心,加1分
2. 如果成功跳到下一个方块上,且刚好跳到方块中心,则第一次加2分,此后连续跳到中心时每次递增2分。也就是说,第一次跳到方块中心加2分,连续第二次跳到方块中心加4分,连续第三次跳到方块中心加6分,…,以此类推。
3. 如果未能成功跳到方块上,加0分,且游戏结束
现在给出玩家一局游戏的每次跳跃情况,请计算玩家最终得分。输入说明
输入为若干个非零整数(整数个数小于1000),表示玩家每次的跳跃情况。整数之间用空格分隔,整数取值为0,1,2。
0 表示未能成功跳到下一个方块上,
1 表示成功跳到下一个方块上但未跳到方块中心,
2 表示成功跳到下一个方块上,且刚好跳到方块中心。
输入的数据只有最后一个整数是0,其余均非零。输出说明
输出一个整数表示该玩家的最终得分。输入样例
1 1 2 1 2 2 2 0输出样例
17
//写法1
int a;
scanf("%d", &a);
int sum = 0;
int cnt = 0;
while(a != 0){
if (a == 1) {
sum+=1;
cnt=0;
}
if (a == 2){
cnt += 1;
sum += 2*cnt;
}
scanf("%d", &a);
}
printf("%d", sum);
//写法2
#include <stdio.h>
int main(){
int a[1000] = {0};
int i;
for (i=0; i<1000; i++){
scanf("%d", &a[i]);
if(a[i] == 0) break;
}
int grade = 0, cnt = 0;
for(i=0; a[i]!=0; i++){
if (a[i]==1){
cnt = 0;
grade++;
}
if (a[i]==2){
cnt++;
grade += cnt*2;
}
}
printf("%d", grade);
return 0;
}
【93】整数比较1
描述:
编写程序,对于从键盘输入的2个整数,先输出较大者的个位数字,然后输出较小者的平方值输入说明:
输入的两个整数之间以一个空格分隔输出说明:
在一行上输出两个整数,整数之间以一个空格分隔,最后换行输入样例
29989 372输出样例
9 138384
int a, b;
scanf("%d %d", &a, &b);
if (a<b){
int t = a;
a = b;
b = t;
}
a = a%10;
printf("%d %d", a, b*b);
**【94】整数比较2(冒泡排序)
描述:
从键盘输入四个整数,要求按由小到大的顺序输出。输入说明:
输入四个整数,以空格间隔。输出说明:
输出排序后的整数,以空格间隔。输入样例
-99 9 99 -9输出样例
-99 -9 9 99
#include <stdio.h>
int main(){
int a[4];
int i;
for(i=0; i<4; i++) {
scanf("%d", &a[i]);
}
int end;
for (end=3; end>0; end--){
for(i=0; i<end; i++){
if(a[i]>a[i+1]){
int swap;
swap = a[i];
a[i] = a[i+1];
a[i+1] = swap;
}
}
}
for (i=0; i<4; i++){
printf("%d ", a[i]);
}
return 0;
}
【97】输出26个英文字母
描述:
编写一个程序,分别按正向和逆向输出小写字母输入说明:
无输出说明:
字母间以空格分隔,正向输出完换行,再逆向输出
#include <stdio.h>
int main(){
char a[26] = {'a'};
int i;
for (i=1; i<26; i++){
a[i] = a[i-1] + 1;
}
for (i=0; i<26; i++){
printf("%c ", a[i]);
}
printf("\n");
for (i=25; i>=0; i--){
printf("%c ", a[i]);
}
return 0;
}
【98】成绩分级2
描述
给出一个百分制的成绩,要求输出成绩等级'A','B','C','D','E'。90分以上为'A',80~89分为'B',70~79分为'C',60~69分为'D',60分以下为'E'。输入说明
输入一个百分制成绩,浮点型,如78.5。输出说明
输出成绩和等级,成绩保留两位小数,如78.50 C输入样例
78.5输出样例
78.50 C提示
格式输出%.2f %c
#include <stdio.h>
int main(){
double x;
scanf("%lf", &x);
char y;
if (x>=90.0){
y = 'A';
}
if (x>=80 && x<90){
y = 'B';
}
if (x>=70 && x<80){
y = 'C';
}
if (x>=60 && x<70){
y = 'D';
}
if (x<60){
y = 'E';
}
printf("%.2f %c", x, y);
return 0;
}
【99】阶梯电价2
描述
电价分三个档次,一档:0~110(含110)度电,每度电0.5元;二挡:110~210(含210)度电,超出110部分每度电0.55元;三挡:超过210度电,超出210部分每度电0.70元,给出一个家庭一月用电量,请计算出应缴的电费。输入说明
输入一月用电量,正实数,如70.5。输出说明
输出应缴电费、档次和该档超额使用的电量数据,档次使用字母A、B和C表示,分别对应一、二和三档,电量和电费使用浮点型,结果四舍五入,保留小数点后两位小数输入样例
70.5输出样例
35.25 A 0.00提示
格式输出%.2f %c %.2f
#include <stdio.h>
int main(){
double x;
scanf("%lf", &x);
char y;
double n, m;
if (x<=110){
y = 'A';
m = 0.0;
n = 0.5*x;
}
if (x>110 && x<=210){
y = 'B';
m = x-110;
n = 110*0.5+m*0.55;
}
if (x>210){
y = 'C';
m = x-210;
n = 110*0.5+100*0.55+m*0.7;
}
printf("%.2f %c %.2f", n, y, m);
return 0;
}
【101】四位密码器
描述
编制密码转换方式:大写字母➡小写字母,小写字母➡大写字母,数字➡*,其它符号➡@输入说明
输入函数使用scanf,格式%c控制。输出说明
输出密码转换后的结果。输入样例
A2c&输出样例
a*C@提示
输入四位密码字符,如A2c&
#include <stdio.h>
int main(){
char a[4];
int i;
for(i=0; i<4; i++){
scanf("%c", &a[i]);
if(a[i]>='1'&&a[i]<='9'){
a[i] = '*';
}else if(a[i]>='A'&&a[i]<='Z'){
a[i] += 'a' - 'A';
}else if (a[i]>='a'&&a[i]<='z'){
a[i] -= 'a' - 'A';
}else{
a[i] = '@';
}
printf("%c", a[i]);
}
return 0;
}
【112】分段函数1
题目描述:
编写程序计算分段函数f(x)的值输入格式:
输入实数x的值输出格式:
输出f(x)的值,结果保留两位小数示例:
输入:4
输出:2.00
#include <stdio.h>
#include <math.h>
int main(){
double x, y;
scanf("%lf", &x);
if (x>=0){
y = sqrt(x);
}
if (x<0){
y = (x+1.0)*(x+1.0)+2.0*x+1.0/x;
}
printf("%.2f", y);
return 0;
}
【116】阶梯电价控制
问题描述:
电价分三个档次,[0,110]度电,每度电0.5元;(110,210]度电,超出110部分每度电0.55元,超过210度电,超出210部分每度电0.70元,给出一个家庭一月用电量,请计算出应缴的电费(四舍五入,保留小数点后两位小数)。输入说明:
输入数据为一个正实数,表示一月用电量输出说明:
输出应缴电费,四舍五入保留2位小数。输入样例:
输入样例1 100
输入样例2 200
输入样例3 329.75输出样例:
输出样例1 50.00
输出样例2 104.50
输出样例3 193.82
#include <stdio.h>
int main(){
double x;
scanf("%lf", &x);
double y;
if (x<=110){
y = x*0.5;
}
if (x>110&&x<=210){
y = 110*0.5+(x-110)*0.55;
}
if (x>210){
y = 110*0.5+100*0.55+(x-210)*0.7;
}
printf("%.2f", y);
return 0;
}
【146】英文表示数字
题目描述:
输入一个0~9的一位整数,输出其对应的英文单词。要求用switch结构完成。示例:
输入:0 8
输出:zero eight
#include <stdio.h>
int main(){
int n;
scanf("%d", &n);
switch(n){
case 0:
printf("zero");
break;
case 1:
printf("one");
break;
case 2:
printf("two");
break;
case 3:
printf("three");
break;
case 4:
printf("four");
break;
case 5:
printf("five");
break;
case 6:
printf("six");
break;
case 7:
printf("seven");
break;
case 8:
printf("eight");
break;
case 9:
printf("nine");
break;
}
return 0;
}
【147】求奇数的和
题目描述:
计算给定一组整数中奇数的和,直到遇到0时结束。输入格式:
共一行,输入一组整数,以空格分隔输出格式:
输出一个整数示例:
输入:1 2 3 4 5 0 6 7
输出:9
#include <stdio.h>
int main(){
int n;
scanf("%d", &n);
int sum = 0;
while(n!=0){
if (n%2==1){
sum+=n;
}
scanf("%d", &n);
}
printf("%d", sum);
return 0;
}
【149】求交错序列前N项和
题目描述:
编写程序,计算交错序列1-2/3+3/5-4/7+5/9-6/11+…的前N项之和。输入格式:
输入一个正整数输出格式:
输出计算结果,结果保留三位小数示例:
输入:5
输出:0.917
#include <stdio.h>
int main(){
float n;
scanf("%f", &n);
float i;
float j=1.0;
float sum=0.0;
for (i=0.0; i<n; i++){
sum = sum + j*(i+1)/(2*i+1);
j=-j;
}
printf("%.3f", sum);
return 0;
}
【150】分段函数2
问题描述:
有一个函数,编程输出其函数值。说明:
输入自变量x(输入必须为整数)
输出对应的函数值。输入样例:3
输出样例:5
#include <stdio.h>
int main(){
int x;
scanf("%d", &x);
int y;
if (x<1){
y = x;
}
if (x>=1&&x<10){
y=2*x-1;
}
if (x>=10){
y=3*x-11;
}
printf("%d",y);
return 0;
}
【151】利润计算
问题描述:
输入说明:
从键盘输入当月利润I。输出说明:
输出当月应发的奖金总数,结果保留两位小数。输入样例:
150000输出样例:
13750.00
#include <stdio.h>
int main(){
int i;
scanf("%d", &i);
double a;
if(i<=100000){
a = 0.1*i;
}
if(i>100000&&i<=200000){
a = 10000 + (i-100000)*0.075;
}
if (i>200000&&i<=400000){
a = 10000+100000*0.075+(i-200000)*0.05;
}
if (i>400000&&i<=600000){
a = 10000+100000*0.075+200000*0.05+(i-400000)*0.03;
}
if (i>600000&&i<=1000000){
a = 10000+100000*0.075+200000*0.05+200000*0.03+(i-600000)*0.015;
}
if (i>1000000){
a = 10000+100000*0.075+200000*0.05+200000*0.03+400000*0.015+(i-1000000)*0.01;
}
printf("%.2f", a);
return 0;
}
【155】阶乘之和
描述
输入自然数N(N<10),采用双层for循环结构,计算N!和ΣN!,并输出结果。输入说明
输入自然数N(<10),如7输出说明
输出N、N!、ΣN!输入样例
7输出样例
7 5040 5913提示
采用双层for循环结构,不大于10的自然数的阶乘之和
#include <stdio.h>
int main(){
int n;
scanf("%d", &n);
int i;
int fac=1, sum=0;
if (n==0) sum=1;
for(i=1; i<=n; i++){
fac *=i;
sum += fac;
}
printf("%d %d %d", n, fac, sum);
return 0;
}
【156】数字个数统计
描述
统计区间为[100,500)内,能被7或11整除,但不能被7和11同时整除的整数个数。输入说明
无输出说明
输出个数统计结果输入样例
无输出样例
83提示
采用for循环结构
#include <stdio.h>
int main(){
int cnt = 0;
int i;
for (i=100; i<500; i++){
if ((i%7==0||i%11==0)&&i%77!=0){
cnt++;
}
}
printf("%d", cnt);
return 0;
}
【157】自然数求和
描述
输入自然数N(N<65536),采用直到型循环结构,对不大于N的所有自然数求和,并输出。输入说明
输入自然数N,如15输出说明
输出不大于N的所有自然数之和输入样例
15输出样例
120提示
采用while循环结构,不大于N的自然数之和
#include <stdio.h>
int main(){
int n;
scanf("%d", &n);
int i = 0;
int sum = 0;
while(i<=n){
sum += i;
i++;
}
printf("%d", sum);
return 0;
}
【161】数字个数统计2
描述
输入一个正整数N(300≤N≤500),统计N(1~N)以内奇数、偶数和能分别被3、5、7整除的数字个数。输入说明
输入正整数N(300≤N≤500),如452输出说明
输出N以内奇数、偶数和能分别被3、5、7整除的数字个数输入样例
452输出样例
226 226 150 90 64提示
编制子函数双数Even()、单数Odd()、Sum_3()、Sum_5()和Sum_7()分别实现数字统计和输出,无返回值,各输出之间空一个空格;主函数调用
#include <stdio.h>
int js(int n);
int sum(int n, int x);
int main(){
int n;
scanf("%d", &n);
printf("%d %d %d %d %d", js(n), n-js(n), sum(n, 3), sum(n, 5), sum(n, 7));
return 0;
}
int js(int n){
int ret = 0;
int i;
for (i=1; i<=n; i++){
if (i%2 == 1){
ret++;
}
}
return ret;
}
int sum(int n, int x){
int ret = 0;
int i;
for(i=1; i<=n; i++){
if (x==3 && i%3==0){
ret++;
}else if (x==5 && i%5==0){
ret++;
}else if (x==7 && i%7==0){
ret++;
}
}
return ret;
}
**【183】最大公约数和最小公倍数
问题描述:
输入两个正整数m和n,求其最大公约数和最小公倍数。输入说明:
输入两个正整数m和n。输出说明:
输出m和n的最大公约数和最小公倍数。输入样例:
8 12输出样例:
4 24
//写法1
#include <stdio.h>
int main(){
int m, n;
scanf("%d %d", &m, &n);
int a=m, b=n;
int i,j;
while(m%n!=0){
i = m % n;
m = n;
n = i;
}
printf("%d %d", n, a*b/n);
return 0;
}
//写法2
#include <stdio.h>
int main(){
int m, n;
scanf("%d %d", &m, &n);
int t;
if(m>n){
t = m;
m = n;
n = t;
}
int i;
int gcd = n;
for(i=m; i>0; i--){
if(m%i==0&&n%i==0){
gcd = i;
break;
}
}
int gcm = m*n/gcd;
printf("%d %d", gcd, gcm);
return 0;
}
***【185】迭代法求根
问题描述:
用迭代法求,求平方根的迭代公式为
。要求前后两次求出的x的差的绝对值小于10^-5。
输入说明:
输入浮点数a。输出说明:
输出一个浮点数x,小数点后保留5位小数。输入样例:
3输出样例:
1.73205
#include <stdio.h>
#include <math.h>
int main(){
double a;
scanf("%lf", &a);
double x0 = a/2.0;
double x1 = (x0+a/x0)/2.0;
while(fabs(x0-x1)>=pow(10,-5)){
x0 = x1;
x1 = (x0+a/x0)/2.0;
}
printf("%.5f", x1);
return 0;
}
【189】小球下落问题
问题描述:
一个球从100m的高度自由落下,每次落地后反跳回原高度的一半,再落下,再反弹。求它在第n次落地时,共经过多少米,第n次反弹多高。注:5<=n<=15输入说明:
输入一个整数,表示第n次落地反弹。输出说明:
输出两个浮点数,表示小球经过的距离,和第n次反弹的高度,小数点后保留3位小数。输入样例:
10输出样例:
S=299.609 h=0.098
#include <stdio.h>
int main(){
int n;
scanf("%d", &n);
double h=50.0;
double s=100.0;
int i;
for(i=2; i<=n; i++){
s = s + h*2.0;
h = h/2.0;
}
printf("S=%.3f h=%.3f", s, h);
return 0;
}
*** 【196】输出金字塔
题目描述:
请输入一个大写字母作为字母金字塔的最大字母输入示例:
C输出示例:
A
ABA
ABCBA (最后一行开头无空格)
#include <stdio.h>
int main(){
char t;
scanf("%c", &t);
char t0 = t;
char t1, t2, t3;
for(t2='A';t2<=t;t2++){
for(t1='A'; t1<t0; t1++){
printf(" ");
}
for(t3='A'; t3<t2; t3++){
printf("%c", t3);
}
for(;t3>'A';t3--){
printf("%c", t3);
}
printf("A\n");
t0--;
}
return 0;
}
【249】分解质因数
题目描述:
每个非素数(合数)都可以写成几个素数(也可称为质数)相乘的形式,这几个素数就都叫做这个合数的质因数。编写程序将一个正整数分解质因数输入描述:
输入一个正整数n(2<n<1000)输出描述:
形如a*b*b*c,质因数按照从小到大的顺序排列输入样例:
90输出样例:
2*3*3*5
#include <stdio.h>
int isPrime(int a);
int main(){
int n;
scanf("%d", &n);
int i;
while(isPrime(n)!=1){
for(i=2; i<n; i++){
if(n%i==0&&isPrime(i)==1){
printf("%d*", i);
n /= i;
i--;
}
}
}
printf("%d", n);
return 0;
}
int isPrime(int a){
int ret = 1;
int i;
for(i=2; i<a; i++){
if(a%i==0) ret = 0;
}
return ret;
}
【298】最大值与最小值
题目描述:
输入两个大于4的正整数a和b,分别计算(a+b)^2、(a-b)^2、a^2+b^2,a^2-b^2,并找出其中的最大值和最小值输入描述:
输入为两个正整数a和b,4<=a,b<1000,整数之间由空格分开输出描述:
输出两个整数,分别为最大值和最小值输入样例:8 10
输出样例:324 -36
#include <stdio.h>
int main(){
int a, b;
scanf("%d %d", &a, &b);
int x1 = (a+b)*(a+b);
int x2 = (a-b)*(a-b);
int x3 = a*a+b*b;
int x4 = a*a-b*b;
int min = x1, max = x1;
if (min>x2){
min = x2;
}
if (min>x3){
min = x3;
}
if (min>x4){
min = x4;
}
if (max<x2){
max = x2;
}
if (max<x3){
max = x3;
}
if (max<x4){
max = x4;
}
printf("%d %d", max, min);
return 0;
}
【299】奖金计算
问题描述:
企业发放的奖金根据利润提成。利润低于或等于100000元的,奖金可提10%;
利润高于100000元,低于等于200000元(100000<I≤200000)时,低于等于100000元的部分按10%提成,高于100000元的部分,可提成 7.5%;
200000<I≤400000时,低于等于200000元部分仍按上述办法提成,(下同),高于200000元的部分按5%提成;
400000<I≤600000元时,高于400000元的部分按3%提成;
600000<I≤1000000时,高于600000元的部分按1.5%提成;
I>1000000时,超过1000000元的部分按1%提成。从键盘输入当月利润I,求应发奖金总数。输入:为一个整数(≤1200000),当月利润。
输出:一个整数,奖金。
输入示例:900
输出示例:90
#include <stdio.h>
int main(){
int i;
scanf("%d", &i);
int a;
if(i<=100000){
a = 0.1*i;
}
if(i>100000&&i<=200000){
a = 10000 + (i-100000)*0.075;
}
if (i>200000&&i<=400000){
a = 10000+100000*0.075+(i-200000)*0.05;
}
if (i>400000&&i<=600000){
a = 10000+100000*0.075+200000*0.05+(i-400000)*0.03;
}
if (i>600000&&i<=1000000){
a = 10000+100000*0.075+200000*0.05+200000*0.03+(i-600000)*0.015;
}
if (i>1000000){
a = 10000+100000*0.075+200000*0.05+200000*0.03+400000*0.015+(i-1000000)*0.01;
}
printf("%d", a);
return 0;
}
【300】位数判断
题目描述:输入一个不大于9位数的非负整数m,判断m是几位数
输入说明: 输入为一个整数 m,范围 0<=m<=999999999
输出说明: 输出一个整数,表示整数 m 的位数
输入样例: 3456
输出样例: 4
#include <stdio.h>
int main(){
int x;
scanf("%d", &x);
int cnt = 0;
if (x==0){
cnt = 1;
goto out;
}
while(x>0){
x /= 10;
cnt++;
}
out:
printf("%d", cnt);
return 0;
}
【301】亲和数
题目描述:
古希腊数学家毕达哥拉斯在自然数研究中发现,220 的所有真约数(即不是自身的约数)之和为:1+2+4+5+10+11+20+22+44+55+110=284;而 284 的所有真约数为 11、22、44、7171、142142,加起来恰好为 220。人们对这样的数感到很惊奇,并称之为亲和数。一般地讲,如果两个数中任何一个数都是另一个数的真约数之和,则这两个数就是亲和数。你的任务就编写一个程序,判断给出的两个整数m和n是不是亲和数(m和n可以相同)。输入说明
输入为两个整数n和m,(1<n,m≤10000),n和m之间用空格分隔输出说明
在同一行上输出为三项,用空格分隔。
第一项表示判断结果,如果两个数是亲和数输出yes,否则输出no;
第二项是一个整数,表示n的真约数个数;
第三项是一个整数,表示m的真约数个数。测试样例
输入样例1:
220 284
输出样例1:
yes 11 5输入样例2:
4 3
输出样例2:
no 2 1
#include <stdio.h>
int main(){
int n, m;
scanf("%d %d", &n, &m);
int i;
int cnt1 = 0;
int sum1 = 0;
for(i=1; i<n; i++){
if(n%i==0){
cnt1++;
sum1+=i;
}
}
int cnt2 = 0;
int sum2 = 0;
for(i=1; i<m; i++){
if(m%i==0){
cnt2++;
sum2+=i;
}
}
if (sum1==m&&sum2==n){
printf("yes ");
}else{
printf("no ");
}
printf("%d %d", cnt1, cnt2);
return 0;
}
【302】质数求和
问题描述
输入一个大于20的正整数p,求出正整数范围内第p个质数(或素数,大于1且只能被1和自己整除的正整数,)到第p+10个质数之和。其中,第1个质数为2,第2个质数为3,第3个质数为5,第4个质数为7,依次类推。输入说明:一行输入1个整数p,20< p <150。
输出说明:第p个质数到第p+10个质数之和。
输入样例:21
输出样例:1081
#include <stdio.h>
int main(){
int p;
scanf("%d", &p);
int cnt = 0;
int sum = 0;
int n, i;
for(n=2; cnt<p+10; n++){
for(i=2; i<n; i++){
if (n%i==0) break;
}
if (i==n) {
cnt++;
if (cnt>=p) sum += n;
}
}
printf("%d", sum);
return 0;
}
【177】累加和校验
问题描述
数据传输中一种常见的校验方式是累加和校验。其实现方式是在一次通讯数据包的最后加入一个字节的校验数据。
这个校验字节内容为前面数据包中所有数据按字节累加所得结果的最后一个字节。例如:
要传输的信息为: TEST(ASCII码为0x54,0x45,0x53,0x54)
四个字节的累加和为:0x54+0x45+0x53+0x54=0x140
校验和为累加和的最后一个字节,即0x40,也就是十进制的64
现在请设计一个程序计算给出的待传输信息的累加校验和输入说明
输入为一个字符串,字符串长度不超过100个字符输出说明
输出一个十进制整数,表示输入字符串的累加校验和。输入样例
TEST
输出样例
64
#include <stdio.h>
int main(){
char s[101] = {'\0'};
gets(s);
int idx;
int sum = 0;
for (idx=0; s[idx]!='\0';idx++){
sum += s[idx];
}
printf("%d\n", sum&0xff);
return 0;
}