- 如果代码存在问题,麻烦大家指正 ~ ~
- 有帮助麻烦点个赞 ~ ~
实验三-循环结构I
- 7-1 求交错序列前N项和 (分数 15)
- 7-2 寻找250(分数 15)
- 7-3 最大公约数和最小公倍数(分数 15)
- 7-4 统计字符(分数 15)
- 7-5 大笨钟(分数 15)
- 7-6 统计选票(分数 15)
- 7-7 降价提醒机器人(分数 15)
- 7-8 幸运彩票(分数 15)
7-1 求交错序列前N项和 (分数 15)
本题要求编写程序,计算交错序列 1-2/3+3/5-4/7+5/9-6/11+… 的前N项之和。
输入格式:
输入在一行中给出一个正整数N。
输出格式:
在一行中输出部分和的值,结果保留三位小数。
输入样例:
5
输出样例:
0.917
代码长度限制 16 KB
时间限制 400 ms
内存限制 64 MB
参考代码
#include<stdio.h>
int main()
{
int N, i, flag=1;
double sum=0;
scanf("%d", &N);
for(i=1; i<=N; i++) {
sum += 1.0*flag*i/(2*i-1);
flag =- flag;
}
printf("%.3f", sum);
return 0;
}
7-2 寻找250(分数 15)
对方不想和你说话,并向你扔了一串数…… 而你必须从这一串数字中找到“250”这个高大上的感人数字。
输入格式:
输入在一行中给出不知道多少个绝对值不超过1000的整数,其中保证至少存在一个“250”。
输出格式:
在一行中输出第一次出现的“250”是对方扔过来的第几个数字(计数从1开始)。题目保证输出的数字在整型范围内。
输入样例:
888 666 123 -233 250 13 250 -222
输出样例:
5
代码长度限制 16 KB
时间限制 400 ms
内存限制 64 MB
参考代码
#include<stdio.h>
int main()
{
int n, i=0;
while(1) {
scanf("%d", &n);
i++;
if(n==250)
break;
}
printf("%d", i);
return 0;
}
7-3 最大公约数和最小公倍数(分数 15)
本题要求两个给定正整数的最大公约数和最小公倍数。
输入格式:
输入在一行中给出两个正整数M和N(≤1000)。
输出格式:
在一行中顺序输出M和N的最大公约数和最小公倍数,两数字间以1空格分隔。
输入样例:
511 292
输出样例:
73 2044
鸣谢安阳师范学院段晓云老师和软件工程五班李富龙同学补充测试数据!
代码长度限制 16 KB
时间限制 400 ms
内存限制 64 MB
参考代码
#include<stdio.h>
int main()
{
int M, N, a, m, n, i;
scanf("%d%d", &M, &N);
for(i=M; ;i++)
if(i%M==0 && i%N==0) {
m=i;
break;
}
if(M<N) {
a=M;
M=N;
N=a;
}
while(1) {
n=M%N;
M=N;
N=n;
if(n==0)
break;
}
printf("%d %d", M, m);
return 0;
}
7-4 统计字符(分数 15)
本题要求编写程序,输入10个字符,统计其中英文字母、空格或回车、数字字符和其他字符的个数。
输入格式:
输入为10个字符。最后一个回车表示输入结束,不算在内。
输出格式:
在一行内按照
letter = 英文字母个数, blank = 空格或回车个数, digit = 数字字符个数, other = 其他字符个数
的格式输出。
输入样例:
aZ &
09 Az
输出样例:
letter = 4, blank = 3, digit = 2, other = 1
代码长度限制 16 KB
时间限制 400 ms
内存限制 64 MB
参考代码
#include<stdio.h>
int main()
{
int letter=0, blank=0, digit=0, other=0, i;
char x;
for(i=0;i<10;i++) {
scanf("%c", &x);
if((x>='a'&&x<='z') || (x>='A'&&x<='Z'))
letter++;
else if(x==' ' || x=='\n')
blank++;
else if(x>='0' && x<='9')
digit++;
else
other++;
}
printf("letter = %d, blank = %d, digit = %d, other = %d", letter, blank, digit, other);
return 0;
}
7-5 大笨钟(分数 15)
微博上有个自称“大笨钟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.
代码长度限制 16 KB
时间限制 400 ms
内存限制 64 MB
参考代码
#include<stdio.h>
int main()
{
int h, m, i;
scanf("%d:%d", &h, &m);
if(h<12 || h==12 && m==0)
printf("Only %02d:%02d. Too early to Dang.", h, m);
else if(h>12 && m==0)
for(i=h-12; i>0; i--)
printf("Dang");
else if(h>12 && m!=0)
for(i=h-11; i>0; i--)
printf("Dang");
return 0;
}
7-6 统计选票(分数 15)
某次选举的共有三人参选,试编写程序根据输入的选票值,统计三人各自的得票数和废票数,并输出投票结果。统计规则如下:
- 选票值为1表示选Tom
- 选票值为2表示选Jerry
- 选票值为3表示选Spike
- 选票值为0或4表示为废票
- 若3人票数均不大于废票数,则选举结果无效
输入格式:
在一行中依次输入所有选票的值,之间用空格间隔,输入-1则表示输入结束。
输出格式:
在第一行中按如下格式输出票数统计结果。
Tom = 得票数 Jerry = 得票数 Spike = 得票数 Invalid = 废票数
若选举无效,则在第二行中输出
Election invalid!
输入样例1:
3 1 2 1 1 3 3 2 1 2 3 3 2 1 1 3 2 0 1 4 -1
输出样例1:
Tom = 7 Jerry = 5 Spike = 6 Invalid = 2
输入样例2:
3 0 4 0 1 2 0 4 3 2 3 1 1 3 2 0 0 4 -1
输出样例2:
Tom = 3 Jerry = 3 Spike = 4 Invalid = 8
Election invalid!
代码长度限制 16 KB
时间限制 400 ms
内存限制 64 MB
参考代码
#include<stdio.h>
int main()
{
int n, Tom=0, Jerry=0, Spike=0, Invalid=0, i;
for(i=0; ;i++){
scanf("%d", &n);
if(n==-1)
break;
else if(n==1)
Tom++;
else if(n==2)
Jerry++;
else if(n==3)
Spike++;
else if(n==0 || n==4)
Invalid++;
}
if(Invalid>=Tom && Invalid>=Jerry && Invalid>=Spike)
printf("Tom = %d Jerry = %d Spike = %d Invalid = %d\nElection invalid!", Tom, Jerry, Spike, Invalid);
else
printf("Tom = %d Jerry = %d Spike = %d Invalid = %d", Tom, Jerry, Spike, Invalid);
return 0;
}
7-7 降价提醒机器人(分数 15)
小 T 想买一个玩具很久了,但价格有些高,他打算等便宜些再买。但天天盯着购物网站很麻烦,请你帮小 T 写一个降价提醒机器人,当玩具的当前价格比他设定的价格便宜时发出提醒。
输入格式:
输入第一行是两个正整数 N 和 M (1≤N≤100,0≤M≤1000),表示有 N 条价格记录,小 T 设置的价格为 M。
接下来 N 行,每行有一个实数 Pi(−1000.0<Pi<1000.0),表示一条价格记录。
输出格式:
对每一条比设定价格 M 便宜的价格记录 P
,在一行中输出 On Sale! P
,其中 P
输出到小数点后 1 位。
输入样例:
4 99
98.0
97.0
100.2
98.9
输出样例:
On Sale! 98.0
On Sale! 97.0
On Sale! 98.9
代码长度限制 16 KB
- Java (javac)
时间限制 600 ms
内存限制 64 MB- 其他编译器
时间限制 400 ms
内存限制 64 MB
参考代码
#include<stdio.h>
int main()
{
int N, i;
double M, p;
scanf("%d %lf", &N, &M);
for(i=0; i<N; i++) {
scanf("%lf", &p);
if(p<M)
printf("On Sale! %.1lf\n", p);
}
return 0;
}
7-8 幸运彩票(分数 15)
彩票的号码有 6 位数字,若一张彩票的前 3 位上的数之和等于后 3 位上的数之和,则称这张彩票是幸运的。本题就请你判断给定的彩票是不是幸运的。
输入格式:
输入在第一行中给出一个正整数 N(≤ 100)。随后 N 行,每行给出一张彩票的 6 位数字。
输出格式:
对每张彩票,如果它是幸运的,就在一行中输出 You are lucky!
;否则输出 Wish you good luck.
。
输入样例:
2
233008
123456
输出样例:
You are lucky!
Wish you good luck.
代码长度限制 16 KB
时间限制 400 ms
内存限制 64 MB
参考代码
#include<stdio.h>
int main()
{
int i, n, a, b, c, d, e, f;
scanf("%d", &n);
for(i=1; i<=n; i++) {
scanf("%1d%1d%1d%1d%1d%1d\n", &a, &b, &c, &d, &e, &f);
if(a+b+c == d+e+f)
printf("You are lucky!\n");
else
printf("Wish you good luck.\n");
}
return 0;
}