本文结合PTA专项练习带领读者掌握循环结构,刷题为主注释为辅,在代码中理解思路,其它不做过多叙述。
文章目录
-
- 7-1 循环-Fibonacci数列的运算
- 7-2 循环-找数字
- 7-3 循环-小智的捕食计划
- 7-4 循环-抱大腿
- 7-5 循环-跳!
- 7-6 循环-生气的峰峰
- 7-7 循环-平方根
- 7-8 循环-得分
- 7-9 循环-7的倍数
- 7-10 循环-斯诺克
- 7-11 循环-桃子与猴子
- 7-12 循环-好吃的苹果
- 7-13 循环-跳动的皮球
- 7-14 循环-Lucky Number
- 7-15 循环-奇偶
- 7-16 循环-美丽的数
- 7-17 循环-对峙
- 7-18 循环-求约数个数
- 7-19 循环-阶乘
- 7-20 循环-斐波那契数列
- 7-21 循环-水仙花数
- 7-22 循环-完美素数
- 7-23 循环-完美数
- 7-24 循环-养兔子
- 7-25 循环-A的B次方
- 7-26 循环-frog
- 7-27 循环-向前冲吧,皮蛋
- 7-28 循环-捡馅饼
- 7-29 循环-max_and_min
- 7-30 循环-Perfect Number
- 7-31 循环-平方根
- 7-32 循环-sum
- 7-33 循环-奇怪的斐波那契数列
- 7-34 循环-字符统计
- 7-35 沙漏
- 7-36 求简单交错序列前N项和
- 7-37 21循环-求和2
- 7-38 个位数
- 7-39 循环-分数矩阵
7-1 循环-Fibonacci数列的运算
小白龙最近学习了Fibonacci数列。它是这样定义的,F(1)=1; F(2)=1; F(n)=F(n-1)+F(n-2) (n>=3); 小白龙想改变一下,他把Fibonacci数列改为:
2/1, 3/2, 5/3…,F(n+2)/F(n+1)这种数列,现在给你一个数字n(2<n<=50),请你求出他前n项之和。
输入格式:
输入仅一个正整数n(2<=n<=50)。
输出格式:
输出为一个实数,保留小数点后六位,表示序列 2/1, 3/2, 5/3…,F(n+2)/F(n+1)的和。
输入样例:
在这里给出一组输入。例如:
7
输出样例:
在这里给出相应的输出。例如:
11.626099
#include <stdio.h>
int main()
{
double a=2,b=1,t,s,sum=0;
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
s=a/b;
sum+=s;
t=a;
a=a+b;
b=t;
}
printf("%.6f",sum);
}
7-2 循环-找数字
输入一行字符串,然后计算数字的个数。
输入格式:
输入一行字符串(不超过一百个字符)。
输出格式:
输出一个整数:数字的个数。
输入样例:
在这里给出一组输入。例如:
520firefirefire
输出样例:
在这里给出相应的输出。例如:
3
#include <stdio.h>
int main()
{
char c;
int count=0;
while((c=getchar())!='\n')
{
if(c>='0'&&c<='9')
{
count++;
}
}
printf("%d",count);
}
7-3 循环-小智的捕食计划
城市外有若干只荒神,小智当天捕食了一半,感觉收获有点少,又捕食了一只。第二天小智捕食了剩下的荒神的一半,又多捕食了一只。到了第n天,发现只剩下一只荒神。求第2天城市外有几只荒神?
输入格式:
输入仅一个整数n(2<=n<=30)。
输出格式:
输出一个整数:第2天城市外有几只荒神。
输入样例:
在这里给出一组输入。例如:
5
输出样例:
在这里给出相应的输出。例如:
22
#include <stdio.h>
int main()
{
int n;
scanf("%d",&n);
int sum=1;
for(int i=n-1;i>=2;i--)
{
sum=(sum+1)*2;
}
printf("%d",sum);
}
7-4 循环-抱大腿
新的一周里,老师给蒟蒻W新布置了n道题的作业,题目的编号1到n,第一道题的难度值为a,往后每道题的难度值比前一道题难度值多b。蒟蒻W有一个能力值c,他只能解决难度值小于等于c的题目。然而,这周的作业难度让W有点难顶,幸运的是,W同时认识hhd学长和orange学长,两位学长都太强了,没有什么题目是他们解决不掉的,然而为了让W能得到锻炼,hhd学长只会帮W解决题目编号为x的倍数且难度值大于c的题,orange学长只会帮W解决题目编号为y的倍数且难度值大于c的题目,现在蒟蒻W想知道两位学长共能帮他解决的题目的难度值之和是多少?
输入格式:
输入数据包含六个整数n,a,b,c,x,y
(0<=n<=1e5, 1<=a,b<=1e3,1<=c<=1e9,2<=x,y<=n,保证所有数据在int范围内)
输出格式:
输出两位学长能帮W解决的题目的难度值和
。
输入样例:
在这里给出一组输入。例如:
100 3 5 50 4 5
输出样例:
在这里给出相应的输出。例如:
10043
#include <stdio.h>
int main()
{
long long int n,a,b,c,x,y;
scanf("%lli%lli%lli%lli%lli%lli",&n,&a,&b,&c,&x,&y);
long long int sum=0,mount=0,all=0;
if(a>c)
{
all+=a;
}
for(long long int i=2;i<=n;i++)
{
a=a+b;
if(i%x==0&&a>c)
{
sum+=a;
}
else if(i%y==0&&a>c)
{
mount+=a;
}
}
all=sum+mount;
printf("%lld",all);
}
7-5 循环-跳!
这是一个夏天的傍晚,hhd学长正在夕阳下愉快地在一条笔直跑道上跳跃,但由于hhd学长长期在实验室里训练,导致体力不足,已知hhd学长第一步可以跳a米,接下来的每一步都只能跳上一步的98%米,现在hhd学长想知道,如果要跳到至少距离起点x米的位置,他需要跳几步?
输入格式:
输入数据包含两个数a,x(2<=a<=5,0<=x<=100)。
a为整数,x不一定为整数。
输出格式:
输出数据仅有一个数,为对应步数。
输入样例:
在这里给出一组输入。例如:
2 4.3
输出样例:
在这里给出相应的输出。例如:
3
#include <stdio.h>
#include <math.h>
int main() {
double a,x;
scanf("%lf%lf",&a,&x);
int n=0;
double sum=0;
while(sum<x)
{
sum+=a*pow(0.98,n);
n++;
}
printf("%d",n);
return 0;
}
7-6 循环-生气的峰峰
小峰峰上初中了,小峰峰除了上学之外,还要参加妈妈为她报名的各科复习班。另外每周妈妈还会送她去学习pascal、c和c++。但是小峰峰如果一天上课超过八个小时就会不高兴,而且上得越久就会越不高兴。假设小峰峰不会因为其它事不高兴,并且她的不高兴不会持续到第二天。请你帮忙检查一下小峰峰下周的日程安排,看看下周她会不会不高兴;如果会的话,哪天最不高兴。
输入格式:
输入包括 7 行数据,分别表示周一到周日的日程安排。每行包括两个小于 10的非负整数,用空格隔开,分别表示小峰峰在学校上课的时间和妈妈安排她上课的时间。
输出格式:
一个数字。如果不会不高兴则输出 0 ,如果会则输出最不高兴的是周几(用 1, 2, 3, 4, 5, 6, 7分别表示周一,周二,周三,周四,周五,周六,周日)。如果有两天或两天以上不高兴的程度相当,则输出时间最靠前的一天。
输入样例:
在这里给出一组输入。例如:
5 3
6 2
7 2
5 3
5 4
0 4
0 6
输出样例:
在这里给出相应的输出。例如:
3
#include <stdio.h>
int main()
{
int a[7],b[7];
for(int i=0;i<7;i++)
{
scanf("%d %d",&a[i],&b[i]);
}
int flag=0;//判断不会不高兴
for(int i=0;i<7;i++)
{
if(a[i]+b[i]>8)
flag=1;
}
if(flag==0)
{
printf("0");
return 0;
}
//判断不高兴
int maxday=-1;
int maxhour=0;
for(int i=0;i<7;i++)
{
int allhour=a[i]+b[i];
if(allhour>maxhour)
{
maxday=i+1;
maxhour=allhour;
}
}
printf("%d",maxday);
return 0;
}
7-7 循环-平方根
输入一个大于等于1000的正整数,计算输出它的平方根(如果平方根不是整数,则输出其整数部分)。要求在输入数据后先对其进行检查是否为大于等于1000的正数,若不是,则重新读入。
输入格式:
输入若干个正整数,直到输入大于等于 1000 。保证输入数据中含有大于等于 1000 的正整数。
输出格式:
输出计算结果。
输入样例:
在这里给出一组输入。例如:
741
681
761
1066
输出样例:
在这里给出相应的输出。例如:
32
#include <stdio.h>
#include <math.h>
int main() {
int n;
do{
scanf("%d",&n);
}while(n<1000);
int a=sqrt(n);
printf("%d",a);
return 0;
}
7-8 循环-得分
众所周知,在各大比赛规则中,选手得分通常由评委团给分中去掉一个最高分和一个最低分以后的平均值。现在,小C需要用电脑算分。于是他找来机智的你来为他写个程序。
输入格式:
输入第一行为一个整数N ( 2 < N <= 100 )。
接下来N行,没行有1个整数(a1 , … , aN) 表示评委团给出的分数。(0 < ai <= 100)
输出格式:
输出一个数表示最后得分。(保留到小数点后一位)
输入样例:
在这里给出一组输入。例如:
5
98
95
97
96
100
输出样例:
在这里给出相应的输出。例如:
97.0
7-9 循环-7的倍数
给出一个含有n个整数的序列,请输出这个序列中是7的倍数的数有几个。
输入格式:
第一行输入一个数 n(2 <= n <= 100),表示有 n 个整数。
第二行输入 n 个整数 ai (1 <= i <= n , 0 <= ai <= 100)。
输出格式:
输出序列中是7的倍数的数的个数。
输入样例:
在这里给出一组输入。例如:
13
36 50 13 42 88 87 66 32 28 73 94 52 11
输出样例:
在这里给出相应的输出。例如:
2
#include <stdio.h>
int main()
{
int n,count=0;
scanf("%d",&n);
int a[n];
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
if(a[i]%7==0)
count++;
}
printf("%d",count);
}
7-10 循环-斯诺克
每逢周末,繁荣山丘的村民也会聚集在一起打斯诺克,据说冠军会奖励一台最先进的赛车喔~首先,先来介绍一下斯诺克的基本规则(熟悉的童鞋可以无视(~ ̄▽ ̄)~)
使用的球为1个白球,然后去击打15个红球和6个彩球(黄、绿、棕、蓝、粉、黑)。击球顺序为”一红、一彩”交替. 其中彩球落袋后要放回,直到红球全部落袋。 然后以黄、绿、棕、蓝、粉、黑的顺序逐个击球,最后以得分高者为胜.
分值: 红(1分)、黄(2分)、绿(3分)、棕(4分)、蓝(5分)、粉(6分)、黑(7分)
现在给出球桌上所剩球数balls,皮蛋目前得分score1,对手目前得分score2.请你判断,在最好情况下,皮蛋能否赢得这场球赛?(若出现平局,不算赢)
输入格式:
输入三个正整数balls, score1, score2, 含义如上所述。
输出格式:
若皮蛋能赢得球赛,输出"YES”,否则输出"NO”。
输入样例:
在这里给出一组输入。例如:
12 1 1
输出样例:
在这里给出相应的输出。例如:
YES
#include <stdio.h>
int score(int x)
{
if(x==1)return 7;
if(x==2