for循环语法-习题
for循环-习题
for循环求和
【题目描述】
利用for循环。计算输出1+2+3+...+n的和。
【输入】
输入n。
【输出】
如题述,之和。
【输入样例】
10
【输出样例】
55
【提示】
【数据规模及约定】
对于100%的数据,1≤n≤100。
int a,b=0;
cin>>a;
for(int n=1;n<=a;n++)
{
b+=n;
}
cout<<b;
2.输出偶数
【题目描述】
按照由小到大的顺序,输出1∼n之间的所有偶数。
【输入】
输入n。
【输出】
输出为一行,各个偶数之间用一个空格隔开。
【输入样例】
10
【输出样例】
2 4 6 8 10
【提示】
【数据规模及约定】
对于所有数据,1≤n≤100。
int a,f=0;
cin>>a;
for(int s=1;s<=a;s++)
{
if(s%2==0)
{
cout<<s<<" ";
}
}
3.输出奇偶数之和
【题目描述】
利用for循环,分别输出1∼n之间的所有奇数的和、偶数的和。
【输入】
输入n。
【输出】
输出为一行,两个数(用一个空格隔开),偶数之和与奇数之和。
【输入样例】
10
【输出样例】
30 25
【提示】
【数据规模及约定】
对于所有数据,1≤n≤100。
int a,o=0,j=0;
cin>>a;
for(int n=1;n<=a;n++)
{
if(n%2==0)
{
o+=n;
}
else
{
j+=n;
}
}
cout<<o<<" "<<j;
4.求阶乘
【题目描述】
利用for循环求n!的值。
提示,n!=1×2×...×n。
【输入】
输入一个正整数n。
【输出】
输出n!的值。
【输入样例】
4
【输出样例】
24
【提示】
【数据规模及约定】
对于所有数据,1≤n≤20。
long int a,d=1;
cin>>a;
for(int f=1;f<=a;f++)
{
d*=f;
}
cout<<d;
5.求平均年龄
【题目描述】
班上有学生若干名,给出每名学生的年龄(整数),求班上所有学生的平均年龄,保留到小数点后两位。
【输入】
第一行有一个整数n(1<= n <= 100),表示学生的人数。其后n行每行有1个整数,表示每个学生的年龄,取值为15到25。
【输出】
输出一行,该行包含一个浮点数,为要求的平均年龄,保留到小数点后两位。
【输入样例】
2
18
17
【输出样例】
17.50
double a;
int b,c=0;
cin>>a;
for(int n=1;n<=a;n++)
{
cin>>b;
c+=b;
}
printf("%.2f",c/a);
6.均值
【题目描述】
给出一组样本数据,包含n个浮点数,计算其均值,精确到小数点后4位。
【输入】
输入有两行,第一行包含一个整数n(n小于100),代表样本容量;第二行包含n个绝对值不超过1000的浮点数,代表各个样本数据。
【输出】
输出一行,包含一个浮点数,表示均值,精确到小数点后4位。
【输入样例】
2
1.0 3.0
【输出样例】
2.0000
int a;
double b,c=0;
cin>>a;
for(int n=1;n<=a;n++)
{
cin>>b;
c+=b;
}
printf("%.4f",c/a);
7.求整数的和与均值
【题目描述】
读入n(1≤n≤10000)个整数,求它们的和与均值。
【输入】
输入第一行是一个整数n,表示有n个整数。
第2~n+1行每行包含1个整数。每个整数的绝对值均不超过10000。
【输出】
输出一行,先输出和,再输出平均值(保留到小数点后5位),两个数间用单个空格分隔。
【输入样例】
4
344
222
343
222
【输出样例】
1131 282.75000
```
```c++
int a,f=0;
double n;
cin>>n;
for(int d=1;d<=n;d++)
{
cin>>a;
f+=a;
}
printf("%d %.5f",f,f/n);
8.最高的分数
【题目描述】
孙老师讲授的《计算概论》这门课期中考试刚刚结束,他想知道考试中取得的最高分数。因为人数比较多,他觉得这件事情交给计算机来做比较方便。你能帮孙老师解决这个问题吗?
【输入】
输入两行,第一行为整数n(1 <= n < 100),表示参加这次考试的人数.第二行是这n个学生的成绩,相邻两个数之间用单个空格隔开。所有成绩均为0到100之间的整数。
【输出】
输出一个整数,即最高的成绩。
【输入样例】
5
85 78 90 99 60
【输出样例】
99
int a;
int zf;
int zd=0;
cin>>a;
for(int s=1;s<=a;s++)
{
cin>>zf;
if(zf>zd)
{
zd=zf;
}
}
cout<<zd;
9.最大跨度值
【题目描述】
给定一个长度为n的非负整数序列,请计算序列的最大跨度值(最大跨度值 = 最大值减去最小值)。
【输入】
一共2行,第一行为序列的个数n(1 <= n <= 1000),第二行为序列的n个不超过1000的非负整数,整数之间以一个空格分隔。
【输出】
输出一行,表示序列的最大跨度值。
【输入样例】
6
3 0 8 7 5 9
【输出样例】
9
int a;
int zf;
int zd=0;
int zx=1000;
cin>>a;
for(int s=1;s<=a;s++)
{
cin>>zf;
if(zf>zd)
{
zd=zf;
}
if(zf<zx)
{
zx=zf;
}
}
cout<<zd-zx;
10.奥运奖牌计数
【题目描述】
2008年北京奥运会,A国的运动员参与了n天的决赛项目(1≤n≤17)。现在要统计一下A国所获得的金、银、铜牌数目及总奖牌数。输入第1行是A国参与决赛项目的天数n,其后n行,每一行是该国某一天获得的金、银、铜牌数目。输出4个整数,为A国所获得的金、银、铜牌总数及总奖牌数。
【输入】
输入n+1行,第1行是A国参与决赛项目的天数n,其后n行,每一行是该国某一天获得的金、银、铜牌数目,以一个空格分开。
【输出】
输出1行,包括4个整数,为A国所获得的金、银、铜牌总数及总奖牌数,以一个空格分开。
【输入样例】
3
1 0 3
3 1 0
0 3 0
【输出样例】
4 4 3 11
```
```c++
int j,y,t,n,j2=0,y2=0,t2=0;
cin>>n;
for(int a=1;a<=n;a++)
{
cin>>j>>y>>t;
j2+=j;
y2+=y;
t2+=t;
}
printf("%d %d %d %d",j2,y2,t2,j2+y2+t2);
11.奇数求和
【题目描述】
计算非负整数m到n(包括m和n)之间的所有奇数的和,其中,m 不大于 n,且n 不大于300。例如 m=3,n=12, 其和则为:3+5+7+9+11=35。
【输入】
两个数 m 和 n,两个数以一个空格分开,其中 0≤m≤n≤300 。
【输出】
输出一行,包含一个整数,表示m 到 n(包括m 和 n )之间的所有奇数的和
【输入样例】
7 15
【输出样例】
55
int m,n,h=0;//m小,n大,h记录奇数相加的和
cin>>m>>n;
for(int a=m;a<=n;a++)
{
if(a%2!=0)
{
h+=a;
}
}
cout<<h;
10.奥运奖牌计数
【题目描述】
2008年北京奥运会,A国的运动员参与了n天的决赛项目(1≤n≤17)。现在要统计一下A国所获得的金、银、铜牌数目及总奖牌数。输入第1行是A国参与决赛项目的天数n,其后n行,每一行是该国某一天获得的金、银、铜牌数目。输出4个整数,为A国所获得的金、银、铜牌总数及总奖牌数。
【输入】
输入n+1行,第1行是A国参与决赛项目的天数n,其后n行,每一行是该国某一天获得的金、银、铜牌数目,以一个空格分开。
【输出】
输出1行,包括4个整数,为A国所获得的金、银、铜牌总数及总奖牌数,以一个空格分开。
【输入样例】
3
1 0 3
3 1 0
0 3 0
【输出样例】
4 4 3 11
```
```c++
int j,y,t,n,j2=0,y2=0,t2=0;
cin>>n;
for(int a=1;a<=n;a++)
{
cin>>j>>y>>t;
j2+=j;
y2+=y;
t2+=t;
}
printf("%d %d %d %d",j2,y2,t2,j2+y2+t2);
}
11.奇数求和
【题目描述】
计算非负整数m到n(包括m和n)之间的所有奇数的和,其中,m 不大于 n,且n 不大于300。例如 m=3,n=12, 其和则为:3+5+7+9+11=35。
【输入】
两个数 m 和 n,两个数以一个空格分开,其中 0≤m≤n≤300 。
【输出】
输出一行,包含一个整数,表示m 到 n(包括m 和 n )之间的所有奇数的和
【输入样例】
7 15
【输出样例】
55
int m,n,h=0;//m小,n大,h记录奇数相加的和
cin>>m>>n;
for(int a=m;a<=n;a++)
{
if(a%2!=0)
{
h+=a;
}
}
cout<<h;
}
12.满足条件的数累加
【题目描述】
将正整数m和n之间(包括m和n)能被17整除的数累加,其中,0<m<n<1000。
【输入】
一行,包含两个整数m和n,其间,以一个空格间隔。
【输出】
输出一行,包行一个整数,表示累加的结果。
【输入样例】
50 85
【输出样例】
204
int m,n,b=0;//m小,n大
cin>>m>>n;
for(int a=m;a<=n;a++)
{
if(a%17==0)
{
b+=a;
}
}
cout<<b;
13.整数的个数
【题目描述】
给定k(1<k<100)个正整数,其中每个数都是大于等于1,小于等于10的数。写程序计算给定的k个正整数中,1,5和10出现的次数。
【输入】
输入有两行:第一行包含一个正整数k,第二行包含k个正整数,每两个正整数用一个空格分开。
【输出】
输出有三行,第一行为1出现的次数,第二行为5出现的次数,第三行为10出现的次数。
【输入样例】
5
1 5 8 10 5
【输出样例】
1
2
1
int k,y=0,w=0,s=0,f;//k控制整数,f输入的整数,y一个,w五个,s十个
cin>>k;
for(int a=1;a<=k;a++)
{
cin>>f;
if(f==1)
{
y+=1;
}
else if(f==5)
{
w+=1;
}
else if(f==10)
{
s+=1;
}
}
cout<<y<<endl<<w<<endl<<s;
14.与指定数字相同的个数
【题目描述】
输出一个整数序列中与指定数字相同的数的个数。输入包含2行:第1行为N和m,表示整数序列的长度(N<=100)和指定的数字;第2行为N个整数,整数之间以一个空格分开。输出为N个数中与m相同的数的个数。
【输入】
第1行为N和m,表示整数序列的长度(N<=100)和指定的数字, 中间用一个空格分开;
第2行为N个整数,整数之间以一个空格分开。
【输出】
输出为N个数中与m相同的数的个数。
【输入样例】
3 2
2 3 2
【输出样例】
2
int n,m,a,h=0;//n控制整数
cin>>n>>m;
for(int s=1;s<=n;s++)
{
cin>>a;
if(a==m)
{
h+=1;
}
}
cout<<h;
15.乘方计算
【题目描述】
给出一个整数$a$和一个正整数$n(-1000000≤a≤1000000,1≤n≤10000)$,求乘方$a^n$,即乘方结果。最终结果的绝对值不超过$1000000$。
【输入】
一行,包含两个整数$a$和$n$。$-1000000≤a≤1000000,1≤n≤10000$。
【输出】
一个整数,即乘方结果。题目保证最终结果的绝对值不超过$1000000$。
【输入样例】
2 3
【输出样例】
8
int a,n,j=0;//n=a的n次方,j存储a的次方
cin>>a>>n;
int f=a;//f当做a
for(int i=1;i<n;i++)//重复执行n次a乘f
{
j=a*=f;//将j设为n次a乘f的结果
}【题目描述】
我国现有x亿人口,按照每年0.1%的增长速度,n年后将有多少人?保留小数点后四位。
【输入】
一行,包含两个整数x和n,分别是人口基数和年数,以单个空格分隔。
【输出】
输出最后的人口数,以亿为单位,保留到小数点后四位。1<=x<=100,1<=n<=100。
【输入样例】
13 10
【输出样例】
13.1306
cout<<j;//输出j
16.人口增长
【题目描述】
我国现有x亿人口,按照每年0.1%的增长速度,n年后将有多少人?保留小数点后四位。
【输入】
一行,包含两个整数x和n,分别是人口基数和年数,以单个空格分隔。
【输出】
输出最后的人口数,以亿为单位,保留到小数点后四位。1<=x<=100,1<=n<=100。
【输入样例】
13 10
【输出样例】
13.1306
float n;//n代表人口
int m; //m代表年数
cin>>n>>m;
for(i=1;i<=m;i++)
{
n=n+n*0.001;
}
printf("%.4f",n);
17.斐波那契数列
【题目描述】
菲波那契数列是指这样的数列: 数列的第一个和第二个数都为1,接下来每个数都等于前面2个数之和。给出一个正整数k,要求菲波那契数列中第k个数是多少。
【输入】
输入一行,包含一个正整数k。(1 ≤ k ≤ 46)
【输出】
输出一行,包含一个正整数,表示菲波那契数列中第k个数的大小。
【输入样例】
19
【输出样例】
4181
int k,f=1,f1=1,f2=1;
cin>>k;
for(int i=3;i<=k;i++)
{
f=f1+f2;
f1=f2;
f2=f;
}
printf("%d",f);
18.鸡尾酒疗法
【题目描述】
鸡尾酒疗法,指“高效抗逆转录病毒治疗”。人们在鸡尾酒疗法的基础上又提出了很多种改进的疗法。为了验证这些治疗方法是否在疗效上比鸡尾酒疗法更好,可用通过临床对照实验的方式进行。假设鸡尾酒疗法的有效率为x,新疗法的有效率为y,如果y-x大于5%,则效果更好,如果x-y大于5%,则效果更差,否则称为效果差不多。下面给出n组临床对照实验,其中第一组采用鸡尾酒疗法,其他n-1组为各种不同的改进疗法。请写程序判定各种改进疗法效果如何。
【输入】
第一行为整数n(1<n<=20);其余n行每行两个整数,第一个整数是临床实验的总病例数(小于等于10000),第二个疗效有效的病例数。这n行数据中,第一行为鸡尾酒疗法的数据,其余各行为各种改进疗法的数据。
【输出】
有n-1行输出,分别表示对应改进疗法的效果:如果效果更好,输出better;如果效果更差,输出worse;否则输出same。
【输入样例】
5
125 99
112 89
145 99
99 97
123 98
【输出样例】
same
worse
better
same
float n,x,y,a,b;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a>>b;
if(i==1)
{
x=b/a;
}
else
{
y=b/a;
if(y-x>0.05)
{
cout<<"better"<<endl;
}
else if(x-y>0.05)
{
cout<<"worse"<<endl;
}
else
{
cout<<"same"<<endl;
}
}
}
19、药房管理
【题目描述】
随着信息技术的蓬勃发展,医疗信息化已经成为医院建设中必不可少的一部分。计算机可以很好地辅助医院管理医生信息、病人信息、药品信息等海量数据,使工作人员能够从这些机械的工作中解放出来,将更多精力投入真正的医疗过程中,从而极大地提高了医院整体的工作效率。
对药品的管理是其中的一项重要内容。现在药房的管理员希望使用计算机来帮助他管理。假设对于任意一种药品,每天开始工作时的库存总量已知,并且一天之内不会通过进货的方式增加。每天会有很多病人前来取药,每个病人希望取走不同数量的药品。如果病人需要的数量超过了当时的库存量,药房会拒绝该病人的请求。管理员希望知道每天会有多少病人没有取上药。
【输入】
共3行,第一行是每天开始时的药品总量m。
第二行是这一天取药的人数n(0<n<=100)。
第三行共有n个数,分别记录了每个病人希望取走的药品数量(按照时间先后的顺序)。
【输出】
只有1行,为这一天没有取上药品的人数。
【输入样例】
30
6
10 5 20 6 7 8
【输出样例】
2
int m,n,a,f=0;
cin>>m>>n;
int r=m;
for(int i=0;i<n;i++)
{
cin>>a;
if(r<a)
{
f++;
}
else
{
r-=a;
}
}
cout<<f;
21、正常血压
【题目描述】
监护室每小时测量一次病人的血压,若收缩压在90-140之间并且舒张压在60-90之间(包含端点值)则称之为正常,现给出某病人若干次测量的血压值,计算病人保持正常血压的最长小时数。
【输入】
第一行为一个正整数n(n<100),其后有n行,每行2个正整数,分别为一次测量的收缩压和舒张压。
【输出】
输出仅一行,血压连续正常的最长小时数。
【输入样例】
4
100 80
90 50
120 60
140 90
【输出样例】
2
int n,a,b,sum,zd=0;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a>>b;
if((a<=140 && a>=90) && (b>=60 && b<=90))
{
sum++;
if(sum>zd)
{
zd=sum;
}
}
else
{
sum=0;
}
}
cout<<zd;
22、余数相同问题
【题目描述】
已知三个正整数a,b,c。现有一个大于1的整数x,将其作为除数分别除a,b,c,得到的余数相同。
请问满足上述条件的x的最小值是多少?数据保证x有解。
【输入】
一行,三个不大于1000000的正整数a,b,c,两个整数之间用一个空格隔开。
【输出】
一个整数,即满足条件的x的最小值。
【输入样例】
300 262 205
【输出样例】
19
long long a,b,c;
cin>>a>>b>>c;
for (int x=2;x<=1000000;x++)
{
if((a%x)==(b%x) && (b%x)==(c%x))
{
cout<<x;
break;
}
}
23、分苹果
【题目描述】
把一堆苹果分给n个小朋友,要使每个人都能拿到苹果,而且每个人拿到的苹果数都不同的话,这堆苹果至少应该有多少个?
【输入】
一个不大于1000的正整数n,代表小朋友人数。
【输出】
一个整数,表示满足条件的最少苹果个数。
【输入样例】
8
【输出样例】
36
int n,sum=0;
cin>>n;
for(int a=1;a<=n;a++)
{
sum+=a;
}
cout<<sum;
24、第几项
【题目描述】
对于正整数n,m,求s=1+2+3……+n,当加到第几项时,s的值会超过m?
【输入】
输入m。
【输出】
输出n。
【输入样例】
1000
【输出样例】
45
【提示】
【数据范围】
对于全部数据:1≤m≤40000。
int m,n=1,s=0;
cin>>m;
while(n<=1000000000)
{
s+=n;
if(s>m)
{
cout<<n;
break;
}
n++;
}
25、最大公约数
【题目描述】
求两个正整数m,n的最大公约数。
【输入】
输入m,n。
【输出】
m,n的最大公约数。
【输入样例】
4 6
【输出样例】
2
【提示】
【数据范围】
对于全部数据:m,n<4000000。
int m,n,s,a=1;
cin>>m>>n;
s=m;
while(a<=100000000)
{
if(m%s==0 && n%s==0)
{
cout<<s;
break;
}
s--;
}
26、数据统计
【题目描述】
输入一些整数,求出它们的最小值、最大值和平均值(保留3位小数)。输入保证这些数都是不超过1000的整数。
【输入】
一行,若干个整数。
【输出】
一行,即,最小值、最大值和平均值(保留3位小数)。
【输入样例】
1 2 3
【输出样例】
1 3 2.000
【提示】
【数据范围】
数据个数不超过100
。
int sum=0,zg=0,zd=0,zx=1000000,n;
while(scanf("%d",&n)==1)
{
sum+=n;
zg+=1;
if(n>zd)
{
zd=n;
}
if(n<zx)
{
zx=n;
}
}
printf("%d %d %.3lf",zx,zd,double(sum)/zg);
27、球弹跳的高度
【题目描述】
一球从某一高度h落下(单位米),每次落地后反跳回原来高度的一半,再落下。编程计算气球在第10次落地时,共经过多少米? 第10次反弹多高?
输出包含两行,第1行:到球第10次落地时,一共经过的米数。第2行:第10次弹跳的高度。
【输入】
输入一个整数h,表示球的初始高度。
【输出】
第1行:到球第10次落地时,一共经过的米数。
第2行:第10次弹跳的高度。
注意:结果可能是实数,结果用double类型保存。
提示:输出时不需要对精度特殊控制,用cout << ANSWER,或者printf("\%g",ANSWER)即可。
【输入样例】
20
【输出样例】
59.9219
0.0195312
double h,sum=0,s;
cin>>h;
s=h;
for(int i=1;i<=10;i++)
{
sum+=h;
h/=2;
}
cout<<sum*2-s<<endl<<h;
28、角谷猜想
【题目描述】
谓角谷猜想,是指对于任意一个正整数,如果是奇数,则乘3
加1,如果是偶数,则除以2,得到的结果再按照上述规则重复处理,最终总能够得到1。如,假定初始整数为5,计算过程分别为16、8、4、2、1。程序要求输入一个经理得到1的过程输出来。
【输入】
一个正整数n
(n≤2,000,000
)。
【输出】
从输入整数到1
的步骤,每一步为一行,每一部中描述计算过程。最后一行输出"End"。如果输入为1
,直接输出"End"。
【输入样例】
5
【输出样例】
5*3+1=16
16/2=8
8/2=4
4/2=2
2/2=1
End
【提示】
no
int n;
cin>>n;
do
{
if(n%2==0)
{
cout<<n<<"/2="<<n/2<<endl;
n/=2;
}
else
{
cout<<n<<"*3+1="<<n*3+1<<endl;
n=n*3+1;
}
}while(n!=1);
cout<<"End";
29、级数求和
【题目描述】
已知:Sn=1+12+13+…+1n。显然对于任意一个整数k,当n足够大的时候,Sn大于k。现给出一个整数k(1<=k<=15),要求计算出一个最小的n,使得Sn>k。
【输入】
一个整数k。
【输出】
一个整数n。
【输入样例】
1
【输出样例】
2
这题用int储存n,是因为double不精确
int k,n=1;
double s=0;
cin>>k;
while(s<=k)
{
s+=1.0/n;
n++;
}
cout<<n-1;
30、分离整数的各个数
【题目描述】
给定一个整数n(1≤n≤100000000),要求从个位开始分离出它的每一位数字。从个位开始按照从低位到高位的顺序依次输出每一位数字。
【输入】
输入一个整数,整数在1到100000000之间。
【输出】
从个位开始按照从低位到高位的顺序依次输出每一位数字。数字之间以一个空格分开。
【输入样例】
123
【输出样例】
3 2 1
```
这题要用一个条件:整数相除,不保留小数部分。一个数取余10会获得最后一位,除以10会让十位变成最后一位。
```c++
int n;
cin>>n;
while(n!=0)
{
cout<<n%10<<" ";
n /= 10;
}
31、数字反转
【题目描述】
给定一个整数,请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零,例如输入−380,反转后得到的新数为−83。
【输入】
输入共 1 行,一个整数N。
−1,000,000,000≤N≤1,000,000,000。
【输出】
输出共 1 行,一个整数,表示反转后的新数。
【输入样例】
123
【输出样例】
321
【提示】
【输入输出样例 2】
输入:
-380
输出:
-83
```
这题要用一个条件:整数相除,不保留小数部分。一个数取余10会获得最后一位,除以10会让十位变成最后一位。但是这题和上一题最大的不同点是上一题是输出每一位,这题是输出一个整数,获取一位就要让前一位往前一位。
```c++
int n,s=0;
cin>>n;
while(n!=0)
{
s=s*10+n%10;
n /= 10;
}
cout<<s;
32、含k个3的数
【题目描述】
输入两个正整数m和k,其中1<m<100000,1<k<5 ,判断m 能否被19整除,且恰好含有k个3,如果满足条件,则输出YES,否则,输出NO。 例如,输入:43833 3,满足条件,输出YES。如果输入:39331 3,尽管有3个3,但不能被19整除,也不满足条件,应输出NO。
【输入】
m 和 k 的值,中间用单个空格间隔。
【输出】
满足条件时输出 YES,不满足时输出 NO。
【输入样例】
43833 3
【输出样例】
YES
要取出每一位来和3比较
int k,n,sum=0;
cin>>n>>k;
if(n%19==0)
{
while(n)
{
if(n%10==3)
{
sum+=1;
}
n/=10;
}
if(sum==k)
{
cout<<"YES";
}
else
{
cout<<"NO";
}
}
else
{
cout<<"NO";
}
33、末两位数
【题目描述】
求n个1992的乘积的末两位数是多少?
【输入】
输入n。
【输出】
如题述的末两位数。
【输入样例】
3
【输出样例】
88
【提示】
【数据范围】
对于所有数据:n<2000。
积的个位与十位只与被乘数和乘数的各位与十位相关。
int n,i=1,sum=92;
cin>>n;
do
{
sum*=92;
sum=sum%100;
i++;
}while(i<n);
cout<<sum;
34、体操队
【题目描述】
校体操队到操场集合,排成每行2人,最后多出1人;排成每行3人,也多出1人;分别按每行排4,5,6人,都多出1人;当排成每行7人时,正好不多。求校体操队至少多少人?
【输入】
如题述,无。
【输出】
校体操队人数。
例如:人数为15,直接输出15就可以啦。
【输入样例】
无
【输出样例】
无
这题的重点是怎么求出人数,要做判断,如果取余2,3,4,5,6都等于一,并且取余7等于0就可以
#include <iostream>
using namespace std;
int main()
{
int i=1;
do
{
if((i%2==1) && (i%3==1) && (i%4==1) && (i%5==1) && (i%6==1) && (i%7==0))
{
cout<<i;
break;
}
i++;
}while(i);
return 0;
}
35、弹球跳高度的计算
【题目描述】
一球从某一高度h
落下(单位米),每次落地后反跳回原来高度的一半,再落下。编程计算气球在第10次落地时,共经过多少米? 第10次反弹多高?
输出包含两行,第1行:到球第10次落地时,一共经过的米数。第2行:第10次弹跳的高度。
【输入】
输入一个整数h
,表示球的初始高度。
【输出】
第1行:到球第10次落地时,一共经过的米数。
第2行:第10次弹跳的高度。
注意:结果可能是实数,结果用double类型保存。
提示:输出时不需要对精度特殊控制,用cout << ANSWER,或者printf("\%g",ANSWER)即可。
【输入样例】
20
【输出样例】
59.9219
0.0195312
用double保存
double h,sum=0,s,i=1;
cin>>h;
s=h;
do
{
sum+=h;
h/=2;
i++;
}while(i<=10);
cout<<sum*2-s<<endl<<h;
36、角谷猜想
【题目描述】
谓角谷猜想,是指对于任意一个正整数,如果是奇数,则乘3加1,如果是偶数,则除以2,得到的结果再按照上述规则重复处理,最终总能够得到1。如,假定初始整数为5,计算过程分别为16、8、4、2、1。程序要求输入一个整数,将经过处理得到1的过程输出来。
【输入】
一个正整数n
(n≤2,000,000)。
【输出】
从输入整数到1
的步骤,每一步为一行,每一部中描述计算过程。最后一行输出"End"。如果输入为1,直接出"End"。
【输入样例】
5
【输出样例】
5*3+1=16
16/2=8
8/2=4
4/2=2
2/2=1
End
【提示】
no
要换行,用格式化输出
int n;
cin>>n;
do
{
if(n%2==0)
{
cout<<n<<"/2="<<n/2<<endl;
n/=2;
}
else
{
cout<<n<<"*3+1="<<n*3+1<<endl;
n=n*3+1;
}
}while(n!=1);
cout<<"End";
37、级数求和
【题目描述】
已知:Sn=1+12+13+…+1n。显然对于任意一个整数k,当n足够大的时候,Sn大于k。现给出一个整数k(1<=k<=15),要求计算出一个最小的n,使得Sn>k。
【输入】
一个整数k。
【输出】
一个整数n。
【输入样例】
1
【输出样例】
2
double不精确,用:小数变量=1.0/=整形变量
int k,n=1;
double s=0;
cin>>k;
do
{
s+=1.0/n;
n++;
}while(s<=k);
cout<<n-1;
38、分离整数的各个数
【题目描述】
给定一个整数n(1≤n≤100000000),要求从个位开始分离出它的每一位数字。从个位开始按照从低位到高位的顺序依次输出每一位数字。
【输入】
输入一个整数,整数在1到100000000之间。
【输出】
从个位开始按照从低位到高位的顺序依次输出每一位数字。数字之间以一个空格分开。
【输入样例】
123
【输出样例】
3 2 1
```
这题要用一个条件:整数相除,不保留小数部分。一个数取余10会获得最后一位,除以10会让十位变成最后一位。
```c++
int n;
cin>>n;
do
{
cout<<n%10<<" ";
n /= 10;
}
39、数字反转
【题目描述】
给定一个整数,请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零,例如输入−380,反转后得到的新数为−83。
【输入】
输入共 1 行,一个整数N。
−1,000,000,000≤N≤1,000,000,000。
【输出】
输出共 1 行,一个整数,表示反转后的新数。
【输入样例】
123
【输出样例】
321
【提示】
【输入输出样例 2】
输入:
-380
输出:
-83
```
这题要用一个条件:整数相除,不保留小数部分。一个数取余10会获得最后一位,除以10会让十位变成最后一位。但是这题和上一题最大的不同点是上一题是输出每一位,这题是输出一个整数,获取一位就要让前一位往前一位。
```c++
int s=0,n;
cin>>n;
do
{
s=s*10+n%10;
n/=10;
}while(n);
cout<<s;
40、含k个3的数
【题目描述】
输入两个正整数m和k,其中1<m<100000,1<k<5 ,判断m 能否被19整除,且恰好含有k个3,如果满足条件,则输出YES,否则,输出NO。 例如,输入:43833 3,满足条件,输出YES。如果输入:39331 3,尽管有3个3,但不能被19整除,也不满足条件,应输出NO。
【输入】
m 和 k 的值,中间用单个空格间隔。
【输出】
满足条件时输出 YES,不满足时输出 NO。
【输入样例】
43833 3
【输出样例】
YES
要取出每一位来和3比较
int k,n,sum=0;
cin>>n>>k;
if(n%19==0)
{
do
{
if(n%10==3)
{
sum+=1;
}
n/=10;
}while(n);
if(sum==k)
{
cout<<"YES";
}
else
{
cout<<"NO";
}
```
##40、阶乘和
```c++
【题目描述】
求 S=1!+2!+3!+....+n!
【输入】
输入正整数n。
【输出】
输出s。
【输入样例】
3
【输出样例】
9
【提示】
【数据范围】
对于所有数据:1≤n≤10。
一个循环获取数字,一个循环求阶乘
int a,sum=0,j=1;
cin>>a;
for(int i=1;i<=a;i++)
{
j=1;
for(int o=1;o<=i;o++)
{
j*=o;
}
sum+=j;
}
41、三角形
【题目描述】
对于给定的自然数n(n<20),在屏幕上输出仅由“*”构成的n行的直角三角形。
【输入】
输入n。
【输出】
题述三角形。
【输入样例】
5
【输出样例】
*
**
***
****
*****
题解
1.读题可知,要输出n行*形成一个三角形。
2.第一个循环用来获取1-n之间的数。第二个循环用来输出
42、水仙花数
【题目描述】
求100∼999中的水仙花数。若三位数ABCABC=A3+B3+C3,则称ABC为水仙花数。
例如153,13+53+33=1+125+27=153,则153是水仙花数。
【输入】
无
【输出】
由小到大输出满足条件的数,每个数占一行。
假设需要输出两个数:119,100。需要输出以下形式:
100
119
【输入样例】
无
【输出样例】
无
题解
读题可知,此题需要把一个数拆分开并求它的三次方可以用循环嵌套或直接乘。
int a,b,c,a2=0,b2=0,c2=0;
for(int i=100;i<=999;i++)
{
a=i%10;
b=i/10%10;
c=i/100%10;
a2=a*a*a;
b2=b*b*b;
c2=c*c*c;
if((a2+b2+c2)==i)
{
cout<<i<<endl;
}
}
return 0;
43、找素数
【题目描述】
输出正整数a到b之间的所有素数。
【输入】
输入a,b。
【输出】
由小到大,输出a到b之间的所有素数。每个数占一行。
【输入样例】
5 10
【输出样例】
5
7
【提示】
【数据范围】
对于所有数据,1≤a≤b≤20000
题解
1.读题可知,本题需要用到素数的概念
素数:只能被1和自己本身整除的数
2.输出a-b之间所有的整数,此时使用for 获取到 a-b 之间所有的数。
3.判断一个数是否为素数,同样也需要写一个循环,从2开始,到当前这个数减一的数为止,因为不能包含 1和自己本身。
4.这里需要用到一个特殊的逻辑,需要使用到布尔值,默认当前这个数是素数,如果可以被1和自己本身整除的话,将布尔值改为假。
5.在第二个循环下面判断,如果布尔值为真,就证明这个数是素数。
int a,b;
bool s;
cin>>a>>b;
for(int j=a;j<=b;j++)
{
s=true;
for(int f=2;f<j;f++)
{
if(j%f==0)
{
s=false;
}
}
if(s)
{
cout<<j<<endl;
}
}
44、四位完全平方数
【题目描述】
输出所有形如aabb的四位完全平方数(即前两位数字相等,后两位数字也相等)。
【输入】
无
【输出】
由小到大输出,每个数占一行。
【输入样例】
无
【输出样例】
无
题解
本题使用到的数学概念:
完全平方数:一个数乘自己所得的积
本体新学到的头文件:
cmath 数学头文件
本题新学习的函数:
cout<<sqrt(9);
int a,b,c,d;
double j,j2;
for(int i=1000;i<=9999;i++)
{
a=i%10;
b=i/10%10;
c=i/100%10;
d=i/1000%10;
if((a==b) && (c==d))
{
j=sqrt(i);
j2=int(j);
if(j2==j)
{
cout<<i<<endl;
}
}
}
45、找素数
【题目描述】
输出正整数a到b之间的所有素数。
【输入】
输入a,b。
【输出】
由小到大,输出a到b之间的所有素数。每个数占一行。
【输入样例】
5 10
【输出样例】
5
7
【提示】
【数据范围】
对于所有数据,1≤a≤b≤20000
题解
1.读题可知,本题需要用到素数的概念
素数:只能被1和自己本身整除的数
2.输出a-b之间所有的整数,此时使用for 获取到 a-b 之间所有的数。
3.判断一个数是否为素数,同样也需要写一个循环,从2开始,到当前这个数减一的数为止,因为不能包含 1和自己本身。
4.这里需要用到一个特殊的逻辑,需要使用到布尔值,默认当前这个数是素数,如果可以被1和自己本身整除的话,将布尔值改为假。
5.在第二个循环下面判断,如果布尔值为真,就证明这个数是素数。
int a,b;
bool s;
cin>>a>>b;
for(int j=a;j<=b;j++)
{
s=true;
for(int f=2;f<j;f++)
{
if(j%f==0)
{
s=false;
}
}
if(s)
{
cout<<j<<endl;
}
}
46、数1的个数
【题目描述】
给定一个十进制正整数n(1≤n≤10000)
,写下从1
到n
的所有整数,然后数一下其中出现的数字“1”的个数。例如当n=2时,写下1,2。这样只出现了1个“1”;当n=12时,写下1,2,3,4,5,6,7,8,9,10,11,12。这样出现了5个“1”。
【输入】
正整数n。1≤n≤10000。
【输出】
一个正整数,即“1”的个数。
【输入样例】
12
【输出样例】
5
题解
读题所知,需要获得n以下的所有数再拆分开来看一共有多少个1。
int n,k,sum=0,a2;
cin>>n;
for(int a=1;a<=n;a++)
{
a2=a;
while(a2)
{
k=a2%10;
if(k==1)
{
sum+=1;
}
a2/=10;
}
}
cout<<sum;
return 0;