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;
posted @ 2023-07-29 14:37  yanxinyi123  阅读(500)  评论(0编辑  收藏  举报