OJ题目:问题回顾三
题目描述
sum=2+5+8+11+14+…,输入正整数n,求sum的前n项和。
输入要求
输出要求
假如输入
2
应当输出
7
#include<stdio.h> int main(){ int n; scanf("%d",&n); printf("%d",n*(3*n+1)/2); return 0; } |
题目描述
从键盘输入任意20个整型数,统计其中的负数个数并求所有正数的平均值。
保留两位小数
输入要求
输出要求
假如输入
1 2 3 4 5 6 7 8 9 10
-1 -2 -3 -4 -5 -6 -7 -8 -9 -10
应当输出
10
5.50
#include<stdio.h>
int main() { int a,count=0,i; double sum=0; for(i=0;i<20;i++) { scanf("%d",&a); if(a<0) count++; else sum+=a; } printf("%d %.2lf ",count,sum/(20-count)); return 0; } |
题目描述
输入两个正整数m和n,求其最大公约数和最小公倍数。
输入要求
输出要求
假如输入
2 3
应当输出
1
6
提示
#include<stdio.h> int main() { int m,n; scanf("%d %d",&m,&n); if(m<n) { int temp; temp=n; n=m; m=temp; } int chengji; chengji=m*n; int r; while(n!=0) { r=m%n; m=n; n=r; } printf("%d %d ",m,chengji/m); return 0; } |
题目描述
输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
输入要求
输出要求
假如输入
a 1,
应当输出
1
1
1
1
#include<stdio.h> int main() { int yingwen=0,shuzi=0,kongge=0,qita=0; char c; while((c=getchar())!=' ') { if((c>='a'&&c<='z')||(c>='A'&&c<='Z')) { yingwen++; } else if(c>='0'&&c<='9') { shuzi++; } else if(c==' ') { kongge++; } else qita++; } printf("%d %d %d %d ",yingwen,kongge,shuzi,qita); return 0; } |
题目描述
给出一个不多于5位的整数,要求 1、求出它是几位数 2、分别输出每一位数字 3、按逆序输出各位数字,例如原数为321,应输出123
输入要求
一个不大于5位的数字
输出要求
三行 第一行 位数 第二行 用空格分开的每个数字,注意最后一个数字后没有空格 第三行 按逆序输出这个数
假如输入
12345
应当输出
5
1 2 3 4 5
54321
提示
哈姆雷特:数字还是字符?这是一个问题!
#include<stdio.h> #include<string.h> int main(){ char ch[6]; int i; gets(ch); printf("%d ",strlen(ch)); for(i=0;i<strlen(ch)-1;i++){ printf("%c ",ch[i]); } printf("%c ",ch[strlen(ch)-1]); for(i=strlen(ch)-1;i>=0;i--){ printf("%c",ch[i]); } return 0; } |
题目描述
一球从M米高度自由下落,每次落地后返回原高度的一半,再落下。 它在第N次落地时反弹多高?共经过多少米? 保留两位小数
输入要求
M N
输出要求
它在第N次落地时反弹多高?共经过多少米? 保留两位小数,空格隔开,放在一行
假如输入
1000 5
应当输出
31.25 2875.00
#include<stdio.h> int main(){ int n; double m; int i; double a=0,b=0; scanf("%lf%d",&m,&n); a=m; for(i=0;i<n;i++){ a/=2; b+=(a*3); } printf("%.2f %.2f ",a,b-a); return 0; } |
题目描述
输入一个字符串,空格作为单词分隔符,统计其中的单词,并将单词逆序输出
输入要求
输入一个字符串
输出要求
逆序输出单词
假如输入
I love you!
应当输出
you love I!
#include <stdio.h> #include<string.h> int main(void) { char stext[300],*p=stext; gets(stext); int len=strlen(stext); char lastChar=stext[len-1]; // 将最后的字符(叹号)缓存; stext[len-1]=' '; while(*p) p++; for(p--;p>stext;p--){ if(*p==' '){ printf("%s ",p+1); *p=' '; } } printf("%s",stext); printf("%c ",lastChar); // 输出最后的字符(叹号); return 0; } |
题目描述
输入两点坐标(X1,Y1),(X2,Y2),计算并输出两点间的距离。
输入要求
输入数据有多组,每组占一行,由4个实数组成,分别表示x1,y1,x2,y2,数据之间用空格隔开。
输出要求
对于每组输入数据,输出一行,结果保留两位小数。
假如输入
0 0 0 1
0 1 1 0
应当输出
1.00
1.41
#include<stdio.h> #include<math.h> int main() { float x1,y1,x2,y2; while(scanf("%f %f %f %f",&x1,&y1,&x2,&y2)!=EOF) { printf("%.2f ",sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))); } return 0; } |
题目描述
根据当前银行的利率表,从键盘输入存款金额money,存期year和年利率rate,计算银行存款的本息
计算公式为: sum=money(1+rate)year,sum为本息合计,输出保留一位小数。
书上印刷有误,year应为指数。
输入要求
存款金额money,存期year和年利率rate
输出要求
本息合计
假如输入
10000 5 0.1
应当输出
16105.1
#include<stdio.h> #include<math.h> int main(void) { int money=0,year=0; double rate,p,q,sum; scanf("%d %d %lf",&money,&year,&rate); p=rate+1.0; q=pow(p,year); sum=money*q; printf("%.1f",sum); return 0; } |