文章目录
- 前言
- 2.题目2:数列分段
- 7.题目名称 车牌限行
- 9.题目:计算球体重量
- 10.题目:温度转换
- 11.题目:整数简单运算
- 15.题目:A+B+C
- 16.题目:字符输入输出
- 19.题目:实数运算
- 20.题目:四则运算
- 21.题目:数位输出
- 27.题目:阶梯电价计费
- 28.标题:计算某月天数
- 29.标题:计算整数各位数字之和
- 30.标题: 完数
- 31.标题: 最大公约数
- 32.标题:角谷定理
- 35.标题:歌德巴赫猜想
- 41.标题:PM2.5
- 42.整除判断
- 43.整数分析
- 45.气温波动
- 46.折点计数
- 47.冰箱温度预测
- 48.除法计算器
- 49.完全平方数
- 50.选号程序
- 50.寻找最大整数
- 51.寻找最大整数
- 52.字符处理
- 53.成绩分级
- 54.abc组合
- 55.数列求和
- 79.计算平均值
- 87.跳一跳
- 89.计算球体的体积
- 90.求三位整数各位数字之和
- 91.求三角形面积
- 92.工资发放
- 93.整数比较1
- 94.整数排序
- 97.输出26个英文字母
- 98.题目:简单程序
- 110.判断奇偶性
- 111.整除判断2
- 112.分段函数1
- 113.出租车计价
- 116.阶梯电价计费
- 125.利率计算
- 126.购房贷款计算
- 147.求奇数的和
- 149.求交错序列前N项和
- 150.分段函数
- 177.累加和校验
- 185.迭代法求根
- 285.分解质因数
- 298.差平方与平方和差
- 299. 奖金计算
- 300.位数判断
- 301.亲和数
- 302.质数求和
- 374.课堂练习-沸水降温曲线
- 375.温度统计
- 378.正整数的最优分解
- 384.种苹果
- 385.报数游戏
- 387.最小公倍数
- 388.统计a的个数
- 389.质数之和
- 399.字符判断
- 400.素数求和
- 401.阶梯电价
- 403.表达式计算
- 404.提成计算
- 405.题目:优惠促销
- 406.题目:表达式计算
- 407.三角形判别与计算
- 418.数位输出
- 424.题目:计算给定年月日时分秒的下一秒
- 426.三角形的判断
- 427.一元二次方程求解
- 428.党费计算
- 429. 奖金计算
- 430.偶数平方表
- 431.区间整数平方和
- 432.整数位数计算
- 433.计算数列Sn
- 449.题目:套餐选择
前言
笔者为一名XDU新生,为了学好C++,将自己做的XDOJ题目的答案放在这里备用,待日后复习。本人水平浅陋,写的不好,如读者有更好的解决方案,欢迎前来讨论。 题目会不定期陆续更新。
事先声明:
1.该文章仅用于个人学习,谢绝未经本人同意和任何用于商业用途的搬运。
2.学校时不时地会更新题库,导致题目可能会有差异,请各位参照答案的同学对照好题目要求,切莫直接抄袭。
2.题目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。
#include<stdio.h>
int main(){
int n,a[1000],j,i;
int k=0;
scanf("%d",&n);
for ( i = 0; i < n; i++)
{
scanf("%d",&a[i]);
}
//将输入的数列整合为一个数组
for ( j = 0; j < n-1; j++)
{
if (a[j]!=a[j+1])
{
k++;
}
}
//得到断点数
printf("%d",k+1);
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
输出样例1
1 no
输入样例2
3 300 67008
输出样例2
8 yes
#include <stdio.h>
int main(){
int week,degree,number;
scanf("%d %d %d", &week, °ree, &number);
if (week==6 || week==7 || degree<200){
printf("%d no", number%10);
}
//若为周末或指数低于200,不限行
else{
if (degree<400 ){
if (number%10==week || number%10==(week+5)%10){
printf("%d yes",number%10);
}
else{
printf("%d no",number%10);
}
//若指数大于等于200,小于400
}
else{
if ((week+number%10)%2==0){
printf("%d yes",number%10);
}
else{
printf("%d no",number%10);
}
}
}
}
9.题目:计算球体重量
问题描述: 已知铁的比重是7.86(克/立方厘米),金的比重是19.3(克/立方厘米)。写一个程序, 分别计算出给定直径的铁球与金球的质量,假定PI=3.1415926。
输入说明: 输入两个整数,分别表示铁球与金球的直径(单位为毫米)。
输出说明: 输出两个浮点数,分别表示铁球与金球的质量(单位为克),小数点后保留3位 小数,两个浮点数之间用空格分隔。
输入样例: 100 100
输出样例: 4115.486 10105.456
用例规模与约定: 输入表示球体直径的整数均于1000。 提示 用scanf 输入,用printf 输出,保留3位小数的格式控制字符为%.3f。
答案:`
#include <stdio.h>
int main()
{
int da,db;
scanf("%d%d",&da,&db);
double Ma, Mb;
double ra, rb, Pi=3.1415926;
ra=da/20.0,rb=db/20.0;
Ma=7.86*ra* ra* ra* Pi* 4/3;
Mb=19.3*rb* rb* rb* Pi* 4/3;
printf("%.3f %.3f\n",Ma,Mb);
return 0;
}
10.题目:温度转换
问题描述: 已知华氏温度到摄氏温度的转换公式为:摄氏温度= (华氏温度- 32)×5/9,编写程序,将给定的华氏温度转换为摄氏温度输出。
输入说明: 只有一个整数,表示输入的华氏温度。
输出说明: 输出一个表示摄氏温度的实数,小数点后保留2位有效数字。
输入样例: 50
输出样例: 10.00
用例规模与约定: 输入表示华氏温度的整数在冰点32℉至沸点212℉之间。 提示: 用scanf 输入,用printf 输出,保留2位小数的格式控制字符为%.2f。
答案:
#include <stdio.h>
int main()
{ int F;
scanf("%d", &F);
double C=5.0/ 9* (F- 32.0);
printf("%.2f\n", C);
}
11.题目:整数简单运算
问题描述:
编写程序,计算用户输入的两个整数的和、差、乘积(*)和商(/)。
输入格式:
输入两个整数,整数之间用空格分隔。
输出格式:
输出四个整数结果,分别表示和、差、积和商,每输出一个结果换行。
输入样例:
3 4
输出样例:
7
-1
12
0
用例规模与约定:
输入的两个整数在区间[-10000, 10000]之内。
代码如下(示例):
#include <stdio.h>
int main()
{ int A,B,Sum,Dif,Pro,Quo;
scanf("%d %d",& A,& B);
Sum=A+ B;
Dif=A- B;
Pro=A* B;
Quo=A/ B;
printf("%d \n%d \n%d \n%d", Sum, Dif, Pro, Quo);
}
15.题目:A+B+C
问题描述:
通过键盘输入三个整数a,b,c,求3个整数之和。
输入说明:
三个整型数据通过键盘输入,输入的数据介于-100000和100000之间,整数
之间以空格分隔。
输出说明:
输出3个数的和。
输入样例:
-6 0 39
输出样例:
33
#include <stdio.h>
int main()
{ int a,b,c,Sum;
scanf("%d %d %d",& a,& b,& c);
Sum=a+b+c;
printf("%d",Sum);
}
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+=32;
b+=32;
c+=32;
d+=32;
e+=32;
printf("%c%c%c%c%c!",a,b,c,d,e);
}
19.题目:实数运算
问题描述:
通过键盘输入长方体的长、宽、高,求长方体的体积V。
输入说明:
输入三个实数,分别表示长方体的长、宽、高,输入数据间用空格分隔。
输出说明:
单精度形式输出长方体体积V,保留小数点后3位,左对齐。
输入样例:
15 8.12 6.66
输出样例:
811.188
#include <stdio.h>
int main()
{ double l,s,h;
scanf("%lf%lf%lf", &l, &s, &h);
float V=1.0*l*s*h;
printf("%.3f\n",V);
}
20.题目:四则运算
问题描述:
输入两个整数和一个四则运算符,根据运算符计算并输出其运算结果(和、
差、积、商、余之一)。注意做整除及求余运算时,除数不能为零。
输入说明:
使用scanf()函数输入两个整数和一个运算符,格式见输入样例,数字和运算
符之间没有空格。
注意:运算符包含+(加)、-(减)、*(乘)、/(除)和%(求余)几种。
输出说明:
输出使用printf()函数,格式见输出样例。
输入样例:
5%2
输出样例:
5%2=1
用例规模与约定:
输入整数在区间[-5000, 5000]之内,且作为整除和求余运算的操作数时,保证
除数不为0。
#include<stdio.h>
int main(){
int n1,n2,final;
char token;
scanf("%d%c%d", &n1,&token, &n2);
if (token=='+'){
final=n1+n2;
}
if (token=='-'){
final=n1-n2;
}
if (token=='%'){
final=n1%n2;
}
if (token=='/'){
final=n1/n2;
}
if (token=='*'){
final=n1*n2;
}
printf("%d%c%d=%d",n1,token,n2,final);
}
21.题目:数位输出
问题描述:
输入一个5位的整数,求出其各数位数值,并按照从高位到低位的顺序输出,
如:输入12345,输出为1 2 3 4 5。
输入说明:
输入一个五位正整数。
输出说明:
按数位从高到低依次输出,各数位之间以一个空格相分隔。
输入样例:
96237
输出样例:
9 6 2 3 7
#include <stdio.h>
int main()
{ int A,a,b,c,d,e;
scanf("%d",&A);
a=A/10000;
b=A/1000-10*a;
c=A/100-100*a-10*b;
d=A/10-1000*a-100*b-10*c;
e=A%10;
printf("%d %d %d %d %d ",a,b,c,d,e);
}
27.题目:阶梯电价计费
问题描述:
电价分三个档次,[0, 110]度电,每度电0.5元;(110, 210]度电,超出110部
分每度电0.55元,超过210度电,超出210部分每度电0.70元,给出一个家庭
一月用电量,请计算出应缴的电费(保留小数点后两位小数)。
输入说明:
输入数据为一个正实数,表示一月用电量
输出说明:
输出应缴电费,保留2位小数。
输入样例1
100
输出样例1
50.00
输入样例2
200
输出样例2
104.50
输入样例3
329
输出样例3
193.30
输入样例3说明:
一个月用电量329度,超出210度的部分为119度,应缴费119×0.7=83.3
元;110~210 度的部分为 100 度,应缴费100×0.55=55 元;低于 110 度的部分
为110度,应缴费110×0.5=55元。综上,合计缴费83.3+55+55=193.3元。
用例规模与约定:
一个月用电量不超过1000度。
#include<stdio.h>
int main(){
double a,fare;
scanf("%lf", &a);
if (a>210){
fare+=(a-210)*0.7;
a=210;
}
if (a>110){
fare+=(a-110)*0.55;
a=110;
}
fare+=0.5*a;
printf("%.2f",fare);
}
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
输出样例1
31
输入样例2
2001 2
输出样例2
28
样例规模与约定:
输入年份a在[1900, 2030]区间,月份b在[1, 12]区间。
#include <stdio.h>
int main(){
int a,b,day;
scanf("%d %d", &a, &b);
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;
}
if (b==2){
if (a%4==0 && a%100!=0 || a%400==0){
day=29;
}
else {
day=28;
}
}
printf("%d",day);
}
29.标题:计算整数各位数字之和
问题描述:
假设n是一个由最多9位数字(d9, …, d1)组成的正整数。编写一个程序计
算n的各位数字之和。
输入说明:
输入数据为一个正整数n。
输出说明:
对整数n输出它的各位数字之和后换行。
输入样例:
3704
输出样例:
14
#include <stdio.h>
int main(){
int n,S=0;
scanf("%d",&n);
while(n!=0){
S+=n%10;
n/=10;
}
printf("%d",S);
}
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(){
unsigned int a,b;
int sum=0;
scanf("%d%d",&a,&b);
for(int i=a;i<=b;i++){
sum=i;
for(int j=1;j<i/2+1;j++){
if(i%j==0){
sum-=j;
}
}
if(sum==0){
printf("%d\n",i);
}
}
return 0;
}
解法二:此版答案在导入XDOJ时需使用GNU C++的方式,否则会编译错误。
#include <stdio.h>
int judge(int number){
int i=1,S=0;
for(i;i<number;i++){
if (number%i==0){
S+=i;
}
}
if (S==number){
return 1;
}
else{
return 0;
}
}
//定义函数,判断是否为完数
main(){
int a,b;
scanf("%d %d", &a, &b);
for(a;a<=b;a++){
if (judge(a)){
printf("%d\n",a);
}
}
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
样例1输出
2
样例2输入:
12 6
样例2输出
6
样例3输入:
3 5
样例3输出
1
#include <stdio.h>
int main(){
int a, b;
scanf("%d %d", &a, &b);
for (int i=a/2+1; i>=1; i--){
if (a==0){
printf("%d", b);
break;
}
if (b==0){
printf("%d", a);
break;
}
if (a%i==0 && b%i==0){
printf("%d", i);
break;
}
}
}
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
样例1输出
15
样例2输入
33
样例2输出
26
#include <stdio.h>
int main(){
int n, N=0;
scanf("%d", &n);
while (n!=1){
if (n%2==0){
n/=2;
N+=1;
}
else{
n=n*3+1;
N+=1;
}
}
printf("%d", N);
return 0;
}
35.标题:歌德巴赫猜想
问题描述:
歌德巴赫猜想:任意一个大偶数都能分解为两个素数的和。对于输入的一个正偶数,写一
个程序来验证歌德巴赫猜想。由于每个正偶数可能分解成多组素数和,仅输出分解值分别是
最小和最大素数的一组。
输入说明
输入一个正偶数n,1<n<1000。
输出说明
输出两个整数,分别表示分解出的最小和最大素数,整数之间以空格分隔。
输入样例
10
输出样例
3 7
#include <stdio.h>
#include <cmath>
int main(){
int n,a,b,token1=0,token2=0;
scanf("%d", &n);
for (a=2; a<=n/2+1;a++ ){
token1=0,token2=0;
b=n-a;
for (int i=2; i<sqrt(a)+1;i++){
if (a%i==0){
token1=1;
}
if (a==2 && i==2){
token1=0;
}
}
for (int i=2; i<sqrt(b)+1;i++){
if (b%i==0){
token2=1;
}
if (b==2 && i==2){
token2=0;
}
}
if (token1==0 && token2==0){
printf("%d %d", a, b);
return 0;
}
}
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
#include <stdio.h>
int main(){
int n,a[1000],i,S=0,output[6]={0,0,0,0,0,0};
double N1;
scanf("%d", &n);
for (i=0;i<n;i++){
scanf("%d", &a[i]);
if (a[i]<=50){
output[0]+=1;
}
else if(a[i]<=100){
output[1]+=1;
}
else if(a[i]<=150){
output[2]+=1;
}
else if(a[i]<=200){
output[3]+=1;
}
else if(a[i]<=300){
output[4]+=1;
}
else if(a[i]>300){
output[5]+=1;
}
S+=a[i];
}
printf("%.2f\n", 1.0*S/n);
for (i=0;i<6;i++){
printf("%d ",output[i]);
}
return 0;
}
42.整除判断
问题描述
判断正整数a能否被b整数,如果不能整除,输出商和余数
输入说明
输入两个正整数a和b(0<a, b<=10000),a和b之间用空格分隔。
输出说明
如果a能被b整除,输出yes,否则在同一行输出a除以b的商和余数,商和余数之间用空格
分隔
输入样例
17 7
输出样例
2 3
#include <stdio.h>
int main()
{ int a, b, c, d;
scanf("%d%d", &a, &b);
c=a/ b,d=a% b;
if (d==0)
{printf("yes");}
else
{printf("%d %d",c,d);}
}
43.整数分析
问题描述
给出一个整数n(0<=n<=100000000)。求出该整数的位数,以及组成该整数的所有数字中的最
大数字和最小数字。
输入说明
输入一个整数n(0<=n<=100000000)
输出说明
在一行上依次输出整数n的位数,以及组成该整数的所有数字中的最大数字和最小数字,各个
数字之间用空格分隔。
输入样例
217
输出样例
3 7 1
#include <stdio.h>
int main(){
int n,i,maxn=0,minn=9,N=0;
scanf("%d",&n);
if (n==0){
minn=0;
N=1;
}
while (n!=0){
i=n%10;
if (maxn<i){
maxn=i;
}
if (minn>i){
minn=i;
}
n/=10;
N+=1;
}
printf("%d %d %d", N, maxn, minn);
return 0;
}
也可以使用do…while 语句简化,比while更简洁,这里不再赘述。
45.气温波动
问题描述
最近一段时间气温波动较大。已知连续若干天的气温,请给出这几天气温的最大波动值是多少,
即在这几天中某天气温与前一天气温之差的绝对值最大是多少。
输入说明
输入数据分为两行。
第一行包含了一个整数n,表示给出了连续n天的气温值,2 ≤ n ≤ 30。
第二行包含n个整数,依次表示每天的气温,气温为-20到40之间的整数。
输出说明
输出一个整数,表示气温在这n天中的最大波动值。
输入样例
6
2 5 5 7-3 5
输出样例
10
#include <stdio.h>
int main(){
int n,i=0,maxchange=0,change=0;
scanf("%d", &n);
int a[n];
for (i;i<n;i++){
scanf("%d", &a[i]);
if (i>0){
change=a[i]-a[i-1];
if (change<0){
change*=-1;
}
if (change>maxchange){
maxchange=change;
}
}
}
printf("%d", maxchange);
}
这里注意使用GNU C/C++上传,否则会出现编译错误。
46.折点计数
问题描述
给定n个整数表示一个商店连续n天的销售量。如果某天之前销售量在增长,而后一天销售量减少,则称这一天为折点,反过来如果之前销售量减少而后一天销售量增长,也称这一天为折点,其他的天都不是折点。
给定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,a[100],i,count=0;
scanf("%d", &n);
for (i=0;i<n;i++){
a[i]=0;
scanf("%d", &a[i]);
}
for (i=1;i<n-1;i++){
if ((a[i]-a[i-1])*(a[i]-a[i+1])>0){
count+=1;
}
}
printf("%d", count);
return 0;
}
47.冰箱温度预测
问题描述
编写一个程序,用于预测冰箱断电后经过时间t(以小时为单位)后的温度T。已知计算公式如下所示
(由于不知名问题,公式中的t显示为了方框+?,将就着看吧。)
输入说明
−20
输入两个整数h和m表示冰箱断电后经过的时间,h表示小时,m表示分钟
输出说明
输出冰箱断电后经过时间t(以小时为单位)后的温度T,保留两位小数
输入样例
2 0
输出样例
-16.0
#include <stdio.h>
int main()
{ int h, m;
scanf("%d %d",&h,&m);
double t=1.0*h+m/60.0,T=4*t*t/(t+2)-20;
printf("%.2f",T);
}
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
#include <stdio.h>
int main()
{ int m, n, q, r,c,d;
scanf("%d %d %d %d", &m, &n, &q, &r);
c=m/ n,d=m% n;
if (c==q && d==r)
{printf("yes");}
else
{printf("%d %d",c,d);}
}
49.完全平方数
问题描述
若一个整数n能表示成某个整数m的平方的形式,则称这个数为完全平方数。写一个程序判断
输入的整数是不是完全平方数。
输入说明
输入数据为一个整数n,0<=n<10000000。
输出说明
如果n是完全平方数,则输出构成这个完全平方数的整数m,否则输出no。
输入样例
样例1:
144
样例2:
15
输出样例
样例1输出:
12
样例2输出:
no
#include <stdio.h>
#include <cmath>
int main(){
int n,m;
scanf("%d", &n);
m=sqrt(n);
if (m*m==n){
printf("%d", m);
}
else {
printf("no");
}
}
50.选号程序
问题描述
小明决定申请一个新的QQ号码,系统随机生成了若干个号码供他选择。小明的选号原则是:
- 选择所有号码中各位数字之和最大的号码。
- 如果有多个号码各位数字之和相同则选择数值最大的号码。
请你写一个程序帮助小明选择一个QQ号码。
输入说明
输入数据由两行构成,第一行为一个整数n表示有n个待选号码(0<n<100),第二行有n个正整
数,表示各个待选的号码,每个号码长度不超过9位数。每个号码之间用空格分隔,且每个号
码都不相同。
输出说明
输出根据小明的选号原则选出的号码。
输入样例
5
10000 11111 22222 333 1234
输出样例
22222
#include <stdio.h>
int main() {
int n;
scanf("%d",&n);
int num[100]={0};
int i;
for(i=0;i<n;i++)
scanf("%d",&num[i]);
int t,max,sum,target=num[0];
for(i=0;i<n;i++)
{
t=num[i];
sum=0;
while(t!=0)
{
sum=sum+t%10;
t=t/10;
}
if(max<sum)
{
max=sum;
target=num[i];
}
else if(max==sum)
{
if(target<num[i])
{
target=num[i];
}
}
}
printf("%d",target);
return 0;
}
50.寻找最大整数
问题描述
从键盘输入四个整数,找出其中的最大值并将其输出。
输入说明
输入4个整数,用空格分隔
输出说明
输出值最大的一个整数
输入样例
25 99-46 0
输出样例
99
#include <stdio.h>
int main(){
int i,a[4],max=0;
for (i=0;i<4;i++){
scanf("%d", &a[i]);
if (a[i]>max){
max=a[i];
}
}
printf("%d",max);
}
51.寻找最大整数
问题描述
从键盘输入四个整数,找出其中的最大值并将其输出。
输入说明
输入4个整数,用空格分隔
输出说明
输出值最大的一个整数
输入样例
25 99 -46 0
输出样例
99
#include <stdio.h>
int main(){
int i,a[4],max=0;
for (i=0;i<4;i++){
scanf("%d", &a[i]);
if (a[i]>max){
max=a[i];
}
}
printf("%d",max);
}
52.字符处理
问题描述
从键盘输入一个字符,若为小写字母,则输出其对应的大写字母;若为大写字母,则输出对应的小写字母;其他字符原样输出。
输入说明
输入一个字符
输出说明
输出一个字符
输入样例
样例1输入
a
样例2输入
B
样例3输入
2
输出样例
样例1输出
A
样例2输出
b
样例3输出
2
#include <stdio.h>
int main()
{ char A;
scanf("%c",&A);
if (A>64 && A<91){
A+=32;
}
else if (A>96 && A<122){
A-=32;
}
printf("%c",A);
}
53.成绩分级
问题描述
给出一个百分制的成绩,要求输出成绩等级’A’,‘B’,‘C’,‘D’,‘E’。90分以上为’A’,80-89分为’B’,70-79 分为’C’,60~69 分为’D’,60 分以下为’E’。
输入说明
输入一个正整数m(0<=m<=100)
输出说明
输出一个字符
输入样例
59
输出样例
E
#include <stdio.h>
int main(){
int m;
scanf("%d", &m);
if (m>89){
printf("A");
}
else if (m>79){
printf("B");
}
else if (m>69){
printf("C");
}
else if (m>59){
printf("D");
}
else {
printf("E");
}
}
54.abc组合
问题描述
已知abc+cba=n,其中a,b,c均为一位数,1000<n<2000,编程求出满足条件的a,b,c所有组合。
输入说明
一个整数n
输出说明
按照整数a,b,c从小到大的顺序,输出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
#include<stdio.h>
int main(){
int n,a,b,c,i;
scanf("%d", &n);
for(i=1;i<1000;i++){
a=i%10;
b=(i/10)%10;
c=(i/100)%10;
if(i+a*100+b*10+c==n){
printf("%d %d %d\n",c,b,a);
}
}
return 0;
}
55.数列求和
问题描述
有一分数序列:
2/1,3/2,5/3,8/5,13/8,21/13,…An/Bn
A1=2,A2=3,An=An-1+An-2;
B1=1,B2=2,Bn=Bn-1+Bn-2。
求出这个数列的前n(2<=n<=30)项之和。
输入说明
一个整数n
输出说明
输出一个实数表示数列前n项之和,结果保留2位小数(四舍五入)
输入样例
2
输出样例
3.50
#include <stdio.h>
int main(){
int n,i;
double sum=0;
int a[n],b[n];
a[0]=2,a[1]=3,b[0]=1,b[1]=2;
scanf("%d", &n);
for (i=0;i<n;i++){
if (i>1){
a[i]=a[i-1]+a[i-2];
b[i]=b[i-1]+b[i-2];
}
sum+=1.0*a[i]/b[i];
}
printf("%.2f",sum);
return 0;
}
79.计算平均值
题目描述:
输入三个整数,编程计算它们的平均值,结果保留两位小数。
输入说明:
在一行上输入三个整数,整数之间用空格分隔。
输出说明:
在一行上输出所输入三个整数的平均值,结果保留两位小数。
输入样例:
20 42 55
输出样例:
39.00
#include <stdio.h>
int main()
{ int a,b,c;
scanf("%d%d%d", &a, &b, &c);
double d=(a+b+c)/3.0;
printf("%.2f",d);
}
87.跳一跳
问题描述
跳一跳是一款微信小游戏,游戏规则非常简单,只需玩家要从一个方块跳到下一
个方块,如果未能成功跳到下一个方块则游戏结束。
计分规则如下:
- 如果成功跳到下一个方块上,但未跳到方块中心,加1分;
- 如果成功跳到下一个方块上,且刚好跳到方块中心,则第一次加 2 分,此后
连续跳到中心时每次递增2分。也就是说,第一次跳到方块中心加2分,连续第
二次跳到方块中心加4分,连续第三次跳到方块中心加6分,…,以此类推; - 如果未能成功跳到方块上,加0分,且游戏结束。
现在给出玩家一局游戏的每次跳跃情况,请计算玩家最终得分。
输入说明
输入为若干个非零整数(整数个数小于1000),表示玩家每次的跳跃情况。整数
之间用空格分隔,整数取值为0,1,2。
0 表示未能成功跳到下一个方块上;
1 表示成功跳到下一个方块上但未跳到方块中心;
2 表示成功跳到下一个方块上,且刚好跳到方块中心。
输入的数据只有最后一个整数是0,其余均非零。
输出说明
输出一个整数表示该玩家的最终得分。
输入样例
1 1 2 1 2 2 2 0
输出样例
17
#include <stdio.h>
int main(){
int i=0,n=1,a[1000]={0},score=0,token=1;
for (i;token==1;i++){
scanf("%d", &a[i]);
if (a[i]==1){
score+=1;
n=1;
}
else if (a[i]==2){
score+=2*n;
n+=1;
}
else if (a[i]==0){
token=0;
}
}
printf("%d", score);
}
89.计算球体的体积
题目描述:
输入球体的半径,计算并输出球体的体积,假定pi=3.14,结果保留两位小数。
输入说明:
输入一个表示球体半径的浮点数。
输出说明:
在一行上输出球体的体积,结果保留两位小数。
输入样例:
5.50
输出样例:
696.56
#include <stdio.h>
#define pi 3.14
int main()
{ double r, V;
scanf("%lf",&r);
V=pi*r*r*r*4/3;
printf("%.2f",V);
}
90.求三位整数各位数字之和
题目描述:
输入一个三位数整数,求其百位、十位和个位数字之和。
输入说明:
输入一个三位整数。
输出说明:
在一行上输出三位整数各位数字的和。
输入样例:
128
输出样例:
11
#include <stdio.h>
int main()
{ int A,a,b,c,S;
scanf("%d",&A);
a=A/100;
b=A/10-10*a;
c=A%10;
S=a+b+c;
printf("%d",S);
}
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 <cmath>
int main()
{ double a,b,c,p,S;
scanf("%lf %lf %lf", &a, &b, &c);
p=(a+b+c)/2.0;
S=sqrt(p*(p-a)*(p-b)*(p-c));
printf("%.2f", S);
}
92.工资发放
题目描述:
某公司财务要发现金工资,需要提前换取100元、50元、20元、10元、5元和
1 元的人民币,输入工资额,计算发放张数最少情况下,各面额的纸币需要多少
张。
输入说明:
输入为一个正整数,表示工资额。
输出格式:
在一行上分别输出面额为100、50、20、10、5、1元的纸币张数,用一个空格隔
开各个数据。
输入样例:
1258
输出样例:
12 1 0 0 1 3
#include <stdio.h>
int main(){
int S, a, b, c, d, e, f;
scanf("%d", &S);
a=S/100;
b=(S-100*a)/50;
c=(S-100*a-50*b)/20;
d=(S-100*a-50*b-20*c)/10;
e=(S-100*a-50*b-20*c-10*d)/5;
f=(S-100*a-50*b-20*c-10*d-5*e);
printf("%d %d %d %d %d %d", a, b, c, d, e, f);
}
93.整数比较1
问题描述:
编写程序,对于从键盘输入的2个整数,先输出较大者的个位数字,然后输出
较小者的平方值。
输入说明:
输入两个整数,整数之间以一个空格分隔。
输出说明:
在一行上输出两个整数,整数之间以一个空格分隔,最后换行。
输入样例:
29989 372
输出样例:
9 138384
#include<stdio.h>
int main(){
int a,b;
scanf("%d%d",&a,&b);
printf("%d %d",a>b?(a%10):(b%10),a>b?(b*b):(a*a));
return 0;
}
94.整数排序
问题描述:
从键盘输入四个整数,要求按由小到大的顺序输出。
输入说明:
输入四个整数,以空格间隔。
输出说明:
输出四个整数的排序结果,整数之间以一个空格间隔。
输入样例: -99 9 99 -9
输出样例: -99 -9 9 99
#include <stdio.h>
int main(){
int a[4],i,temp;
for (i=0;i<4;i++){
scanf("%d", &a[i]);
}
for (i=0;i<4;i++){
for (int j=0;j<4;j++){
if (a[i]<a[j]){
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
}
for (i=0;i<4;i++){
printf("%d ", a[i]);
}
}
97.输出26个英文字母
问题描述:
编写一个程序,分别按正向和逆向输出小写字母。
输入说明:
无。
输出说明:
字母间以一个空格分隔,正向输出完换行,再逆向输出。
输入样例
无。
输出样例
无。
#include<stdio.h>
int main(){
for(int i=97;i<=122;i++){
printf("%c ",i);
}
printf("\n");
for(int i=122;i>=97;i--){
printf("%c ",i);
}
return 0;
}
98.题目:简单程序
问题描述
按输入n的不同情况,输出不同的特定文字。当n为2的倍数,且不是3、5的倍数时,
输出"Nice";当 n 为3的倍数,且不是2、5的倍数时,输出"Good";当n为5的倍数,且
不是2、3的倍数时,输出"Best";其他情况,输出"Bad"。
输入格式
输入一个正整数n(n为自然数,且n≤10,000)。
输出格式
输出特定文字。
样例输入1:
9
样例输入2:
16
样例输入3:
130
样例输出1:
Good
样例输出2:
Nice
样例输出3:
Bad
样例说明
n 为自然数,且不大于10,000。
评测用例规模与约定
n 可以是2、3、5的整数倍,也可以不是。
int main()
{ int n;
scanf("%d", &n);
if (n%2==0 && n%3!=0 && n%5!=0)
{printf("Nice");}
else if(n%2!=0 && n%3==0 && n%5!=0)
{printf("Good");}
else if(n%2!=0 && n%3!=0 && n%5==0)
{printf("Best");}
else
{printf("Bad");}
}
110.判断奇偶性
题目描述:
编写程序,输入一个正整数,判断该数的奇偶性,输出判断的结果(偶数/奇数)。
输入说明:
输入一个正整数。
输出说明:
输出“偶数”或“奇数”。
输入样例:
5
输出样例:
奇数
#include <stdio.h>
int main()
{ int n;
scanf("%d",&n);
if (n%2==0)
{printf("偶数");}
else
{printf("奇数");}
}
111.整除判断2
题目描述:
编写程序,输入一个正整数,判断是否能被5和7同时整除,若可以,则输出yes;否则输出no。
输入格式:
输入一个正整数。
输出格式:
输出“yes”或“no”。
示例:
输入:35
输出:yes
#include <stdio.h>
int main(){
int a;
scanf("%d", &a);
if(a%5==0 && a%7==0)
{printf("yes");}
else
{printf("no");}
return 0;
}
112.分段函数1
#include<stdio.h>
#include<math.h>
int main(){
double x;
scanf("%lf",&x);
printf("%.2f",x>=0?sqrt(x):(pow(x+1,2)+2*x+1/x));
return 0;
}
113.出租车计价
题目描述:
编写程序,根据某城市普通出租车收费标准进行车费计算。标准如下:
(1)起步里程为3公里,起步费10元;
(2)超出起步里程后在10公里(含)内,每公里2元;
(3)超过10公里以上的部分加收50%的回空补贴费,即每公里3元; 营运过程中,因路阻及乘客要求临时停车等待的,按每5分钟2元计费(不足5 分钟不收费)。
输入说明:
输入一个浮点数和一个整数,表示行驶里程(单位为公里,精确到小数点后1位)与等待时间(整数,单位为分钟),其间以空格分隔
输出说明:
在一行中输出乘客应支付的车费(单位为元),结果四舍五入保留整数。
输入样例:
40.0 7
输出样例:
116
#include <stdio.h>
int main()
{ double X,Y=10.0;
int T;
scanf("%lf %d", &X, &T);
if (X>3 ){
Y+=2*(X-3);
}
if(X>10){
Y+=(X-10);
}
Y+=2*(T/5);
printf("%.0f",Y);
}
116.阶梯电价计费
问题描述:
电价分三个档次,[0,110]度电,每度电0.5元;(110,210]度电,超出110度但不
超过210度的部分,每度电0.55元;超过210度电的部分每度电0.70元。给出
一个家庭一月用电量,请计算出应缴的电费(四舍五入,保留小数点后两位小数)。
输入说明:
输入数据为一个正实数,表示一个月的用电量。
输出说明:
输出应缴电费,保留2位小数。
输入样例1
100
输出样例1
50.00
输入样例2
200
输出样例2
104.50
输入样例3
329.75
输出样例3
193.83
#include<stdio.h>
int main(){
double a,fare;
scanf("%lf", &a);
if (a>210){
fare+=(a-210)*0.7;
a=210;
}
if (a>110){
fare+=(a-110)*0.55;
a=110;
}
fare+=0.5*a;
printf("%.2f",fare);
}
125.利率计算
问题描述:
假如我国国民生产总值的年增长率为9%,计算10年后我国国民总值与现在相比增长多少百分比。计算公式为
r 为增长率,n为年数,p为与现在相比的倍数。
输入说明:
输入两个浮点数,分别表示年增长率和年份数,两个浮点数之间用空格分隔。
输出说明:
输出一个浮点数,表示与现在相比的倍数,小数点后保留2位小数。
输入样例:
0.09 10
输出样例:
2.37
#include <stdio.h>
int main()
{ double r,n,p=1.0;
scanf("%lf %lf", &r, &n);
for (int i=0; i<n; i++){
p*=(1+r);
}
printf("%.2f", p);
}
126.购房贷款计算
问题描述:
购房从银行贷了一笔款 d,准备每月还款额为 P,月利率为 r,计算多少月能还清。(设d为300000元, p为6000元,r为1%,对求得的月份取小数点后一位,对第2位按四舍五入处理)
提示:计算还清月数m的公式如下:
也可以将公式改写为:
输入说明:
输入三个浮点数,分别表示贷款额,每月还款额与月利率,三个浮点数之间用空格分隔。
输出说明:
输出以个浮点数,表示还清贷款的月数,小数点后保留2位小数。
输入样例:
300000 6000 0.01
输出样例:
69.66
#include <stdio.h>
#include <cmath>
int main()
{ double d,P,r,m;
scanf("%lf%lf%lf", &d, &P, &r);
m=(log(P/(P-d*r))/log(1+r));
printf("%.2f",m);
}
147.求奇数的和
题目描述:计算给定一组整数中奇数的和,直到遇到0时结束。
输入格式:共一行,输入一组整数,以空格分隔
输出格式:输出一个整数
示例:
输入:1 2 3 4 5 0 6 7
输出:9
#include<stdio.h>
int main(){
int a,b;
int sum=0;
scanf("%d ",&a);
while(a!=0){
if(a%2!=0){
sum=sum+a;
}
scanf("%d ",&a);
}
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(){
int i=0,n,an=1,bn=1;
double S=0;
scanf("%d", &n);
for (i;i<n;i++){
if (i%2==0){
S+=1.0*an/bn;
}
else {
S-=1.0*an/bn;
}
an+=1;
bn+=2;
}
printf("%.3f", S);
}
150.分段函数
#include <stdio.h>
int main(){
int x;
scanf("%d", &x);
if (x<10 && x>=1){
x=2*x-1;
}
else if (x>=10){
x=3*x-11;
}
printf("%d", x);
}
177.累加和校验
问题描述
数据传输中一种常见的校验方式是累加和校验。其实现方式是在一次通讯数据包的最后加入一个字节的校验数据。
这个校验字节内容为前面数据包中所有数据按字节累加所得结果的最后一个字节。例如:
要传输的信息为: TEST(ASCII码为0x54,0x45,0x53,0x54)
四个字节的累加和为:0x54+0x45+0x53+0x54=0x140
校验和为累加和的最后一个字节,即0x40,也就是十进制的64
现在请设计一个程序计算给出的待传输信息的累加校验和
输入说明
输入为一个字符串,字符串长度不超过100个字符
输出说明
输出一个十进制整数,表示输入字符串的累加校验和。
输入样例
TEST
输出样例
64
#include <stdio.h>
#include <string.h>
int main(){
int sum=0;
char string[101]={'\0'};
gets(string);
for (int i=0;string[i]!='\0';i++){
sum+=(int)string[i];
}
printf("%d",sum&255);
/*此处按位与运算——对参与运算的两个数据的二进制位进行"与"运算。
只有两位同时为1时,结果才为1,否则结果为0。
例如:3 & 5 即 0000 0011 & 0000 0101 = 0000 0001,因此 3 & 5 的值为1。
因为255的二进制为1111 1111,&255可将十进制的sum二进制中最后一个字节取出。
*/
}
185.迭代法求根
#include <stdio.h>
int main(){
double a,x1,x2=1.0;
scanf("%lf", &a);
for(;;){
x1=x2;
x2=(x1+a/x1)/2;
if ((x2-x1)<0.00001 && (x2-x1)>-0.00001){
printf("%.5f", x2);
break;
}
}
}
285.分解质因数
题目描述:
每个非素数(合数)都可以写成几个素数(也可称为质数)相乘的形式,
这几个素数就都叫做这个合数的质因数。编写程序将一个正整数分解质因数
输入描述:
输入一个正整数n(2<n<1000)
输出描述:
形如abbc,质因数按照从小到大的顺序排列
输入样例:
90
输出样例:
2335
#include <stdio.h>
int main(){
int n,t;
scanf("%d", &n);
t=n;
for (int i=2;i<t/2+1;i++){
while (n%i==0){
n/=i;
printf("%d",i);
if (n!=1){
printf("*");
}
}
}
}
298.差平方与平方和差
问题描述
输入两个大于4的正整数a和b,分别计算(a+b)2、(a-b)2、a2+b2,、a2-b2,并找出其最大值和最小值。
输入说明
输入为2个正整数a和b,4<= a, b <1000,整数之间由空格分开
输出说明
输出两个整数,分别表示(a+b)2、(a-b)2、a2+b2,、a2-b2 中的最大值和最小值,整数之间用空格分隔。
测试样例:
输入样例1
8 10
输出样例1
324 -36
输入样例2
36 5
输出样例2
1681 961
#include <stdio.h>
int main(){
int a,b,n1,n2,n3,n4,n[4],i,max=-1000000,min=4000000;
scanf("%d %d", &a, &b);
n[0]=(a+b)*(a+b);
n[1]=(a-b)*(a-b);
n[2]=a*a+b*b;
n[3]=a*a-b*b;
for (i=0;i<4;i++){
if (n[i]>max){
max=n[i];
}
if (n[i]<min){
min=n[i];
}
}
printf("%d %d", max, min);
}
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>
#include <cmath>
int main(){
int I,reward,t;
scanf("%d",&I);
t=(I-1)/1e5;
switch(t){
case 0:
reward=I*0.1;
break;
case 1:
reward=(I-1e5)*0.075+1e5*0.1;
break;
case 2:
case 3:
reward=(I-2e5)*0.05+1e5*0.1+1e5*0.075;
break;
case 4:
case 5:
reward=(I-4e5)*0.03+1e5*0.1+1e5*0.075+2e5*0.05;
break;
case 6:
case 7:
case 8:
case 9:
reward=(I-6e5)*0.015+1e5*0.1+1e5*0.075+2e5*0.05+2e5*0.03;
break;
default:
reward=(I-1e6)*0.01+1e5*0.1+1e5*0.075+2e5*0.05+2e5*0.03+4e5*0.015;
}
printf("%d\n",reward);
return 0;
}
300.位数判断
题目描述:
输入一个不大于9位数的非负整数m,判断m是几位数?
输入说明:
输入为一个整数m,范围0<=m<=999999999
输出说明:
输出一个整数,表示整数m的位数
输入样例:
3456
输出样例:
4
#include <stdio.h>
int main(){
int m,count=0;
scanf("%d", &m);
if (m==0){
count=1;
}
while (m!=0){
if (m!=0){
count+=1;
m/=10;
}
}
printf("%d",count);
}
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,count1=0,count2=0,sumn=0,summ=0;
scanf("%d %d", &n, &m);
for (int i=1;i<n/2+1;i++){
if (n%i==0){
count1+=1;
sumn+=i;
}
}
for (int i=1;i<m/2+1;i++){
if (m%i==0){
count2+=1;
summ+=i;
}
}
if (sumn==m && summ==n){
printf("yes");
}
else{
printf("no");
}
printf(" %d %d", count1, count2);
}
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>
#include <cmath>
int judgesushu(int a){
int flag=1;
for (int i=2;i<=sqrt((double)a);i++){
if (a%i==0){
flag=0;
break;
}
}
return flag;
}
//判断是否为素数
void getsushu(int sushuzu[],int p){
int i=0;
for (int j=2;i<p+10;j++){
if (judgesushu(j)){
sushuzu[i++]=j;
}
}
}
//生成含有p+10个素数的数组
int main(){
int sushuzu[150],p,sum=0;
scanf("%d", &p);
getsushu(sushuzu,p);
for (int i=p-1;i<p+10;i++){
sum+=sushuzu[i];
}
printf("%d", sum);
return 0;
}
374.课堂练习-沸水降温曲线
描述:
沸腾的水(100℃)在室温下温度随时间变化的曲线如图所示,给出时间,计算
水的温度
输入:
第一行为两个整数m(m[0,100]),s(s∈[0,59]),分表表示降温时间的分钟数
和秒数
输出:
输出一个小数,表示输入时间对应的水的温度,温度保留1位小数。
输入样例:
5 30
输出样例:
72.5
#include <stdio.h>
int main()
{ int m,s;
scanf("%d%d", &m, &s);
double c,t=s/60.0+m;
if (t>0 && t<=10){
c=100-5*t;
}
else if(t<=30){
c=50-(t-10);
}
else if(t<=50){
c=30-(t-30)/2;
}
else {
c=20;
}
printf("%.1f",c);
}
375.温度统计
输入n天的摄氏温度,将其转换为华氏温度(华氏温度=9/5*摄氏温度+32),求
其平均温度、最高温度、最低温度并输出。
输入:
第一行为表示天数的整数n(0<n<=10)
第二行为n个整数(整数范围[-10,40]),表示n天的摄氏温度,整数之间用空
格分隔。
输出:
将转换后的华氏温度按行输出,每行不超过5个温度值,超过则换行,每个温度
保留一位小数,温度之间用空格分隔。
在单独一行输出最低温度,最高温度和平均温度,用空格分隔。
输入样例:
6
10 5 9 8 12 16
输出样例:
50.0 41.0 48.2 46.4 53.6
60.8
41.0 60.8 50.0
#include <stdio.h>
int main(){
int n;
double a[10],sum=0.0,max=14,min=104;
scanf("%d", &n);
for (int i=0;i<n;i++){
scanf("%lf", &a[i]);
a[i]=9/5.0*a[i]+32;
printf("%.1f ", a[i]);
if (i==4){
printf("\n");
}
if (a[i]>max){
max=a[i];
}
if (a[i]<min){
min=a[i];
}
sum+=a[i];
}
printf("\n%.1f %.1f %.1f", min, max, sum/n);
}
378.正整数的最优分解
#include <stdio.h>
#include <cmath>
int main(){
int n;
scanf("%d", &n);
if (n%2==1){
printf("-1");
}
else {
for (int i=19;i>0;i--){
if (n>=pow(2,i)){
printf("%d ", (int)pow(2,i));
n-=pow(2,i);
}
if (n==0){
break;
}
}
}
return 0;
}
注意:本题代码需要使用GNU C/C++来上传,否则会编译错误或结果错误。
384.种苹果
描述:小明在果园种了一些苹果树,为了保证苹果质量,需要进行若干轮疏果操作(既去掉一些不好的苹果)。小明记录了初始苹果数和每一轮去掉的苹果数,在若干轮后,请帮助小明统计一些信息。
输入:
输入为两行,第一行为一个正整数n,表示进行了n轮疏果操作,1<=n<20;
第二行为n+1个整数,第一个整数t表示初始苹果数(0<t<1000),其后n个整数为0或负整数(每个整数绝对值不超过100),0表示本轮没有去掉苹果,负整数的绝对值表示本轮去掉的苹果数。整数之间用空格分隔。
输出:输出最后剩余苹果数量和疏果最多的轮次(从1开始计数)
样例:
输入样例1:
2
50 -5 -8
输出样例1:
37 2
输入样例2
4
60 -10 -2 0 -4
输出样例2
44 1
#include <stdio.h>
int main(){
int n,sum,max=0,token;
scanf("%d", &n);
int a[n+1];
for (int i=0;i<n+1;i++){
scanf("%d", &a[i]);
}
sum=a[0];
for (int i=1;i<n+1;i++){
if (max>a[i]){
token=i;
max=a[i];
}
sum+=a[i];
}
printf("%d %d", sum, token);
}
385.报数游戏
描述:三位同学决定玩报数游戏来打发时间。游戏规则是从1开始轮流报数,但如果要报的
数字是7的倍数或含有7的数则跳过。此外大家约定一共报出n个数字(不含被跳过的数)
后游戏结束。现在需要你来帮忙统计游戏过程中每个人各跳过了几个数字。
输入:输入为一个整数n,表示游戏结束时共报了n个数字。(0<n<1000)
输出:输出为3个整数,分别表示每个人跳过的数字数量,用空格分隔
样例:
输入样例1:
7
输出样例1:
1 0 0
输入样例2
17
输出样例2
1 2 0
#include <stdio.h>
int judge(int a){
int flag=0;
if (a%7==0){
flag=1;
}
while (a!=0){
if (a%10==7){
flag=1;
break;
}
else{
a/=10;
}
}
return flag;
}
//判断是否为7的倍数或是否含7.
int main(){
int i=1,n,jump1=0,jump2=0,jump3=0,d=0;
scanf("%d", &n);
while (i!=n+d+1){
if (judge(i)){
if (i%3==1){
jump1+=1;
}
else if (i%3==2){
jump2+=1;
}
else {
jump3+=1;
}
d+=1;
}
i++;
}
printf("%d %d %d", jump1, jump2, jump3);
return 0;
}
387.最小公倍数
输入两个大于1且不相等的正整数,输出其最小公倍数。
输入1:
2 6
输出1:
6
输入2:
10 5
输出2:
10
#include <stdio.h>
#include <algorithm>
using namespace std;
int main(){
int a,b;
scanf("%d %d", &a, &b);
for (int i=max(a,b);;i++){
if (i%a==0 && i%b==0){
printf("%d", i);
break;
}
}
return 0;
}
388.统计a的个数
输入5个字符,统计其中字符a的个数。每个字符以空格间隔,大写A
也算
输入1:
a b c d e
输出1:
1
输入2:
a A b c a
输出2:
3
#include <stdio.h>
int main()
{ char a,b,c,d,e;
scanf("%c %c %c %c %c", &a, &b, &c, &d, &e);
int S=0;
if (a==65 || a==97){
S+=1;
}
if (b==65 || b==97){
S+=1;
}
if (c==65 || c==97){
S+=1;
}
if (d==65 || d==97){
S+=1;
}
if (e==65 || e==97){
S+=1;
}
printf("%d",S);
}
389.质数之和
已知,第一个质数是2,第二个质数是3,第三个质数是5,第四个质数是7,
第五个质数是11,第六个质数是13,第七个质数是17,输入两个不相等的
正整数a和b,求出第a个质数到第b个质数当中所有质数和。a和b之间以空格
间隔,其中a和b都小于200。
输入1:
1 4
输出1:
17
输入2:
7 2
输出2:
56
#include <stdio.h>
#include <cmath>
#include <algorithm>
using namespace std;
int judgesushu(int a){
int flag=1;
for (int i=2;i<=sqrt((double)a);i++){
if (a%i==0){
flag=0;
break;
}
}
return flag;
}
//判断是否为素数
void produce(int b,int c[]){
int i=2;
for (int j=0;j<b;j++){
for (i;;i++){
if (judgesushu(i)){
c[j]=i;
i+=1;
break;
}
}
}
}
//生成前b个素数
int main(){
int a,b,sum=0;
scanf("%d %d", &a, &b);
int sushuzu[max(a,b)];
produce(max(a,b),sushuzu);
for (int i=min(a,b)-1;i<max(a,b);i++){
sum+=sushuzu[i];
}
printf("%d", sum);
}
399.字符判断
题目描述:输入一个字符,判断是大写字母、小写字母、还是其他字符。如果是大写字母则转换成小写字母输出;如果是小写字母,则转换成大写字母输出;
如果是数字,则输出数字;如果是其他字符,则输出其他字符。
输入:从键盘上任意输入一个字符
输出: 对应的大写字母、小写字母、数字、或其他字符。
样例1:
输入:R
输出:r
样例2:
输入:!
输出:!是其他字符
样例3:
输入:6
输出:6是数字
#include <stdio.h>
int main()
{ char A;
scanf("%c",&A);
if (A>64 && A<91){
A+=32;
printf("%c", A);
}
else if (A>96 && A<122){
A-=32;
printf("%c",A);
}
else if (A>47 && A<58){
printf("%c是数字", A);
}
else{
printf("%c是其他字符", A);
}
}
400.素数求和
素数求和
问题描述
输入正整数N,1<N<=100000,求区间[2,N]之间的所有素数之和。若N输入异常(在要求范围之外),输出0。
输入说明
输入正整数N。
输出说明
输出整数,表示区间[2,N]之间的素数和,或者输出0。
输入样例
5
输出样例
10
#include <stdio.h>
#include <cmath>
int judgesushu(int a){
int flag=1;
for (int i=2;i<=sqrt((double)a);i++){
if (a%i==0){
flag=0;
break;
}
}
return flag;
}
//判断是否为素数
void produce(int N,int sushuzu[]){
int i=2;
for (int j=0;;j++){
for (i;i<=N;i++){
if (judgesushu(i)){
sushuzu[j]=i;
i+=1;
break;
}
}
if (i==N+1){
break;
}
}
}
//生成小于N的所有素数
int main(){
int N,sum=0;
scanf("%d", &N);
int sushuzu[N]={0};
produce(N,sushuzu);
for (int i=0;i<N;i++){
sum+=sushuzu[i];
}
printf("%d", sum);
}
本题思路与389题类似
401.阶梯电价
问题描述
电价分三个档次,一档:0110度(含110),每度电0.5元;二挡:110210度(含210),
超出110部分每度电0.55元;三挡:210~400度(含400)电,超出210部分每度电0.7元;
四挡:超过400度电,超出400部分每度电1.0元。给出一个家庭一个月的用电量,请计算
出应缴的电费。
输入格式
输入某家庭一个月的用电量(≤1000);
输出格式
输出当月应缴电费、档次和该档超额使用的电量度数,档次使用字母A、B、C和D表
示,分别对应一、二、三和四档,电量和电费使用浮点型,结果四舍五入,保留小数点后两
位小数。
样例输入1:
70.5
样例输入2:
115
样例输入3:
230
样例输出1:
35.25 A 0.00
样例输出2:
57.75 B 5.00
样例输出3:
124.00 C 20.00
样例说明
电量值应不大于1000。
评测用例规模与约定
输出使用%.2f格式控制。
#include<stdio.h>
int main(){
double a,fare=0,dif=0.00;
int rank=1;
scanf("%lf", &a);
if (a>400){
fare+=(a-400);
rank=4;
dif=a-400.0;
a=400;
}
if (a>210){
fare+=(a-210)*0.7;
if (rank<3){
rank=3;
dif=a-210.0;
}
a=210;
}
if (a>110){
fare+=(a-110)*0.55;
if (rank<2){
rank=2;
dif=a-110.0;
}
a=110;
}
fare+=0.5*a;
printf("%.2f ",fare);
switch(rank){
case 1:
printf("A %.2f",dif);
break;
case 2:
printf("B %.2f",dif);
break;
case 3:
printf("C %.2f",dif);
break;
case 4:
printf("D %.2f",dif);
break;
}
}
403.表达式计算
问题描述
对于一个由两个正整数和一个运算符号构成的表达式,数据之间以一个空格分隔,编程
识别表达式含义,并完成计算。运算符号包括+、-、、/和%。表达式如3 5 +或4 8 等。
输入格式
输入两个整数和一个运算符号构成的表达式。
输出格式
输出一行,输出表达式及其计算结果,数据之间不分隔。如:48=32
样例输入1:
2 15 +
样例输入2:
8 7 -
样例输入3:
6 5 *
样例输出1:
2+15=17
样例输出2:
8-7=1
样例输出3:
65=30
样例说明
输入次序:正整数a、正整数b和运算符号。
评测用例规模与约定
输入数值为不大于1000的正整数。
#include <stdio.h>
int main(){
int a,b;
char c;
scanf("%d %d %c", &a, &b, &c);
if (c==42){
printf("%d*%d=%d", a, b, a*b);
}
if (c==43){
printf("%d+%d=%d", a, b, a+b);
}
if (c==45){
printf("%d-%d=%d", a, b, a-b);
}
if (c==47){
printf("%d/%d=%d", a, b, a/b);
}
if (c==37){
printf("%d%%%d=%d", a, b, a%b);
}
}
404.提成计算
#include <stdio.h>
int main (){
int rank,work;
double reward=0;
scanf("%d %d", &rank, &work);
switch (rank){
case 1:
if (work>50000){
reward+=(work-50000)*0.03;
}
printf("%d 50000.0 %.1f", rank, reward);
break;
case 2:
if (work>35000){
reward+=(work-35000)*0.02;
}
printf("%d 35000.0 %.1f", rank, reward);
break;
case 3:
if (work>20000){
reward+=(work-20000)*0.02;
}
printf("%d 20000.0 %.1f", rank, reward);
break;
case 4:
if (work>5000){
reward+=(work-5000)*0.025;
}
printf("%d 5000.0 %.1f", rank, reward);
break;
}
}
405.题目:优惠促销
问题描述
现有超市顾客购物信息:整数m、n(m表示是否VIP会员,仅为1、0,n为购物总额),
结合下述优惠规则,编程完成顾客账单计算任务。优惠规则如下:
商场优惠规则
VIP 购物底数 折扣
是 500 8.0
是 350 8.5
是 200 9.0
否 500 9.0
否 350 9.5
其中,账单金额=购物总额*折扣/10,只能按最大折扣一次计算。
输入格式
输入两个整数分别表示是否是VIP会员(1为会员)和购物总额(不大于5000)。
输出格式
输出账单信息:yes或no、购物总额、账单金额和优惠金额(后3项保留1位小数),
数据之间以一个空格分隔
样例输入1:
1 380
样例输入2:
1 679
样例输入3:
0 409
样例输出1:
yes 380.0 323.0 57.0
样例输出2:
yes 679.0 543.2 135.8
样例输出3:
no 409.0 388.5 20.5
样例说明
VIP会员对应整数1,购物总额不大于5000。
评测用例规模与约定
只能按最大折扣一次计算。
#include <stdio.h>
int main()
{ int m,biao;
double n, S;
scanf("%d %lf", &m, &n);
if (m==1){
biao=1;
if (n<200){
S=n;
}
else if (n>=200 && n<350){
S=0.9*n;
}
else if(n<500){
S=0.85*n;
}
else if(n>500){
S=0.8*n;
}
}
//计算会员的价格
else{
if (n<350){
S=n;
}
else if (n>=350 && n<500){
S=0.95*n;
}
else if(n>500){
S=0.9*n;
}
}
//计算非会员的价格
if (biao==1){
printf("yes %.1f %.1f %.1f", n, S, n-S);
}
else{
printf("no %.1f %.1f %.1f", n, S, n-S);
}
}
406.题目:表达式计算
问题描述
对于一个字符 c(可以是大小写字母、数字或其它字符),按照下述转换规则,编程完
成字符转换任务。转换规则如下:
输入格式
输入一个字符(可以是大小写字母、数字、空格或其他字符)。
输出格式
输出转换前后字符,数据间以一个空格分隔。
样例输入1:
B
样例输入2:
a
样例输入3:
3
样例输出1:
B Z
样例输出2:
a d
样例输出3:
3 6
样例说明
输入可以是大小写字母、数字、空格或其他字符。
评测用例规模与约定
输出转换前后字符。
#include <stdio.h>
int main()
{ char A;
scanf("%c",&A);
printf("%c",A);
if (A>66 && A<91){
A-=2;
}
else if(A==65 || A==66){
A+=24;
}
//实现大写字母-2位
else if (A>47 && A<58){
A=57- A+ 48;
}
//利用输入数字与9的差值实现9-数字
else if (A>95 && A<120){
A+=3;
}
else if(A>119 && A<123){
A-=23;
}
//实现小写字母+3
else if(A==32){
A+=10;
}
//实现空格变为*
else{
A=35;
}
printf(" %c",A);
}
407.三角形判别与计算
#include <stdio.h>
#include <cmath>
int main(){
int a[3],i,temp,P;
double S,c;
for (i=0;i<3;i++){
scanf("%d", &a[i]);
}
for (i=0;i<3;i++){
for (int j=0;j<3;j++){
if (a[i]<a[j]){
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
}
if (a[0]+a[1]>a[2] ){
P=a[0]+a[1]+a[2];
c=P/2.0;
if (a[0]*a[0]+a[1]*a[1]==a[2]*a[2]){
printf("yes 1");
}
else{
printf("yes 2");
}
S=sqrt((double)(c*(c-a[0])*(c-a[1])*(c-a[2])));
printf(" %d %.2f", P, S);
}
else {
printf("no 3");
}
}
418.数位输出
问题描述
输入一个正整数N(位数小于10位),按从小到大的顺序输出该正整数数位。
输入格式
输入一个正整数N。
输出格式
按从小到大的顺序输出正整数N的各个数位,用空格分割。
样例输入
8139345
样例输出
1 3 3 4 5 8 9
#include <stdio.h>
int main(){
int i=0,N,count=0,t,temp;
scanf("%d", &N);
t=N;
for (i;t!=0;i++){
t/=10;
count+=1;
}
int a[count];
for (i=0;i<count;i++){
a[i]=N%10;
N/=10;
}
for (i=0;i<count;i++){
for (int j=0;j<count;j++){
if (a[i]<a[j]){
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
}
for (i=0;i<count;i++){
printf("%d ", a[i]);
}
}
注意,本题使用GNU C/C++上传
424.题目:计算给定年月日时分秒的下一秒
问题描述
编写一个函数,要求输入年月日时分秒,输出该年月日时分秒的下一秒。如输入2004
年12月31日23时59分59秒,则输出2005年1月1日0时0分0秒。
输入格式
年份
月份
天数
小时
分钟
秒数
输出格式
年份
月份
天数
小时
分钟
秒数
样例输入
1999
12
31
23
59
59
样例输出
2000
1
1
0
0
0
样例说明
1999年12月31日23时59份59秒的下一秒为:2000年1月1日0时0份0秒。
评测用例规模与约定
本题的输入,年月日时分秒均为正整数。月份在[1,12]区间内,日期在[1,31]区间内(需
要区分大小月),小时数在[0,23]区间内,分钟数和秒数均在[0,59]区间内
#include <stdio.h>
int main(){
int year, month, day, h, min, s, tokenm=0;
scanf("%d", &year);
scanf("%d", &month);
scanf("%d", &day);
scanf("%d", &h);
scanf("%d", &min);
scanf("%d", &s);
s+=1;
if (s==60){
min+=1;
s=0;
if (min==60){
h+=1;
min=0;
if (h==24){
day+=1;
h=0;
if (month==1 || month==3 || month==5 || month==7 || month==8 || month==10 || month==12){
tokenm=1;
}
else if(month==2){
if (year%4!=0 || year%100==0 && year%400!=0){
tokenm=2;
}
else {
tokenm=3;
}
}
else{
tokenm=4;
}
if (tokenm==2 && day==29){
month+=1;
day=1;
}
else if (tokenm==3 && day==30){
month+=1;
day=1;
}
else if (tokenm==4 && day==31){
month+=1;
day=1;
}
else if (tokenm==1 && day==32){
month+=1;
day=1;
}
if (month==13){
year+=1;
month=1;
}
}
}
}
printf("%d\n%d\n%d\n%d\n%d\n%d\n", year, month, day, h, min, s);
}
如果使用switch函数来写,代码可以简化,这里不再赘述。
426.三角形的判断
题目描述:从键盘输入一个三角形的三条边,判断是否为三角形。若不是
三角形,输出“不是三角形”;若是直角三角形,则输出其面积;否则输出“其
他三角形”。
输入:三个整数,整数之间以空格分隔。
输出:不是三角形、直角三角形面积、或其他三角形。
样例1:
输入:1 2 3
输出:不是三角形
样例2:
输入: 3 4 5
输出:6
样例3:
输入: 7 4 5
输出:其他三角形
#include <stdio.h>
int main(){
int a[3],i,temp;
for (i=0;i<3;i++){
scanf("%d", &a[i]);
}
for (i=0;i<3;i++){
for (int j=0;j<3;j++){
if (a[i]<a[j]){
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
}
if (a[0]+a[1]>a[2] ){
if (a[0]*a[0]+a[1]*a[1]==a[2]*a[2]){
printf("%d", a[0]*a[1]/2);
}
else{
printf("其他三角形");
}
}
else {
printf("不是三角形");
}
}
427.一元二次方程求解
题目描述:计算一元二次方程ax2+bx+c=0的实根,如果有两个不同实根,分
别输出;如果有两个相同实根,则输出一个;如果不存在实根,则输出“no”。
输入:从键盘上输入方程的系数a,b,c,以空格间隔
输出:方程的根
样例1:
输入:1.0 -2.0 1.0
输出:1.0
样例2:
输入: 1.0 -3.0 2.0
输出: 2.0 1.0
样例3:
输入:4.0 2.0 5.0
输出:no
#include <stdio.h>
#include <cmath>
int main(){
double a,b,c,x1,x2;
double delta;
scanf("%lf %lf %lf", &a, &b, &c);
if (b*b-4*a*c>0){
delta=sqrt((double)(b*b-4*a*c));
x1=(delta-b)/2/a;
x2=(-b-delta)/2/a;
printf("%.1f %.1f", x1, x2);
}
else if(b*b-4*a*c==0){
printf("%.1f",-b/2/a);
}
else {
printf("no");
}
}
428.党费计算
题目描述:在职党员缴纳党费的比例如下:每月工资收入(税后)在3000元以
下(含 3000 元)者,交纳月工资收入的 0.5%;3000 元以上至 5000 元(含
5000 元)者,交纳月工资收入的1%;5000元以上至10000 元(含10000 元)
者,交纳月工资收入的1.5%;10000元以上者,交纳月工资收入的2%。
输入说明:输入一个浮点型的数,表示税后工资(小于50000)。
输出说明:输出一个浮点型的数,保留小数点后1位,表示党费。
样例1:
输入:2000.0
输出:10.0
样例2:
输入: 8000.0
输出:120.0
#include <stdio.h>
int main(){
double S,fare;
scanf("%lf", &S);
if (S>10000){
fare=0.02*S;
}
else if (S>5000){
fare=0.015*S;
}
else if (S>3000){
fare=0.01*S;
}
else{
fare=0.005*S;
}
printf("%.1f", fare);
}
429. 奖金计算
题目描述:企业发放奖金是根据利润计算提成。利润低于或等于100000元的,
奖金可提成10%;利润高于 100000 元且大不于 200000 元的,低于 100000 元
的提成按10%计算,高于100000 元的按7.5%计算提成;利润高于200000元且
不大于 400000 元的,低于 200000 元的部分按上述方法提成(下同),高于
400000 元的按 5%计算提成;利润高于 400000 元且不大于 800000 元的,高于
400000 元的按 3%计算提成;利润高于 800000 元的,按 1%计算提成。从键盘
输入当月利润,求应发奖金总数。
输入:输入一个浮点型的数,表示利润(小于2000000.0)
输出:输出一个浮点型的数,保留小数点后1位,表示奖金总数
样例1:
输入:80000.0
输出:8000.0
样例2:
输入: 800000.0
输出:39500.0
#include <stdio.h>
#include <cmath>
int main(){
int t;
double I,reward;
scanf("%lf",&I);
t=(I-1)/1e5;
switch(t){
case 0:
reward=I*0.1;
break;
case 1:
reward=(I-1e5)*0.075+1e5*0.1;
break;
case 2:
case 3:
reward=(I-2e5)*0.05+1e5*0.1+1e5*0.075;
break;
case 4:
case 5:
case 6:
case 7:
reward=(I-4e5)*0.03+1e5*0.1+1e5*0.075+2e5*0.05;
break;
default:
reward=(I-8e5)*0.01+1e5*0.1+1e5*0.075+2e5*0.05+4e5*0.03;
}
printf("%.1f\n",reward);
return 0;
}
本题与第299题极其相似。
430.偶数平方表
描述:
编写程序,对于从键盘输入的1个正整数n,求出1~n的所有偶数的平方值。
输入说明:
输入1个正整数。
输出说明:
每行输出两个整数,分别表示1~n的数及其平方值,整数之间以一个空格分隔。
输入样例
10
输出样例
2 4
4 16
6 36
8 64
10 100
#include <stdio.h>
int main(){
int n;
scanf("%d", &n);
for (int i=2;i<=n;i+=2){
printf("%d %d\n", i, i*i);
}
return 0;
}
431.区间整数平方和
#include <stdio.h>
int main(){
int m, n, sum=0;
scanf("%d %d", &m, &n);
for (int i=m;i<=n;i++){
sum+=i*i;
}
printf("%d", sum);
return 0;
}
432.整数位数计算
题目描述:输入一个整数n(0<=n<=100000000),求出该整数的位数。
输入说明
输入一个整数n(0<=n<=100000000)
输出说明
输出一个整数,表示整数n的位数
测试样例
输入样例1:
23
输出样例1:
2
输入样例2:
520
输出样例2:
3
#include <stdio.h>
int main(){
int m,count=0;
scanf("%d", &m);
if (m==0){
count=1;
}
while (m!=0){
if (m!=0){
count+=1;
m/=10;
}
}
printf("%d",count);
}
本题与第300题完全一致。
433.计算数列Sn
#include <stdio.h>
int main(){
int n;
double Sn=0;
scanf("%d", &n);
for (int i=1;i<=n;i++){
Sn+=1+1.0/i;
}
printf("%.1f",Sn);
}
449.题目:套餐选择
问题描述
套餐A无月租费,话费每分钟0.6元,套餐B月租费50元,话费每分钟0. 4元。输入一个月的通话时间,分别计算出两种套餐的费用,并判断哪一种合适。
输入格式
输入为一个浮点数t,表示一个月的通话时间。
输出格式
输出为两种套餐的费用及判断结果,结果保留两位小数。
样例输入
2000
样例输出
1200.00
850.00
B
样例说明
2000x0.6=1200.00;50+2000.00x0.4=850.00;套餐B更划算。
评测用例规模与约定
1 ≤ t ≤ 10000,A和B花费一样时选B。
#include <stdio.h>
int main()
{ double t, S1, S2;
scanf("%lf", &t);
S1=t*0.6;
S2=50+ 0.4* t;
if (S1>=S2){
printf("%.2f\n%.2f\nB", S1, S2);
}
else{
printf("%.2f\n%.2f\nA", S1, S2);
}
}
先传这么多,剩下的有时间在接着传上去。