循环结构习题

发布时间 2023-12-23 10:32:58作者: jsc2014

3.循环结构-习题

1.for循环求和

【题目描述】
利用for循环。计算输出1+2+3+...+n的和。

【输入】
输入n。

【输出】
如题述,之和。

【输入样例】
10
【输出样例】
55
【提示】
【数据规模及约定】

对于100%的数据,1≤n≤100。
{
int n,j=0;
cin>>n;
for(int i=1;i<=n;i++)
{
	j+=i;
}
cout<<j;
}

2.输出偶数

【题目描述】
按照由小到大的顺序,输出1∼n之间的所有偶数。

【输入】
输入n。

【输出】
输出为一行,各个偶数之间用一个空格隔开。

【输入样例】
10
【输出样例】
2 4 6 8 10
【提示】
【数据规模及约定】

对于所有数据,1≤n≤100。
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
	if(i%2==0)
	{
		cout<<i<<" ";
	}
}

3.输出奇偶数之和

【题目描述】
利用for循环,分别输出1∼n之间的所有奇数的和、偶数的和。

【输入】
输入n。

【输出】
输出为一行,两个数(用一个空格隔开),偶数之和与奇数之和。

【输入样例】
10
【输出样例】
30 25
【提示】
【数据规模及约定】

对于所有数据,1≤n≤100。
int n,j=0,o=0;
cin>>n;
for(int i=1;i<=n;i++)
{
	if(i%2==0)
	{
		o+=i;
	}
	else
	{
		j+=i;
	}
}
cout<<o<<" "<<j;

4.求阶乘

【题目描述】
利用for循环求n!的值。

提示,n!=1×2×...×n。

【输入】
输入一个正整数n。

【输出】
输出n!的值。

【输入样例】
4
【输出样例】
24
【提示】
【数据规模及约定】

对于所有数据,1≤n≤20。
long int n,u=1;
cin>>n;
for(int i=1;i<=n;i++)
{
	u*=i;
}
cout<<u;

5.求平均年龄

【题目描述】
班上有学生若干名,给出每名学生的年龄(整数),求班上所有学生的平均年龄,保留到小数点后两位。

【输入】
第一行有一个整数n(1<= n <= 100),表示学生的人数。其后n行每行有1个整数,表示每个学生的年龄,取值为15到25。

【输出】
输出一行,该行包含一个浮点数,为要求的平均年龄,保留到小数点后两位。

【输入样例】
2
18
17
【输出样例】
17.50
int n;
cin>>n;
double a=0;
double s;
for(int i=1;i<=n;i++)
{
	cin>>s;
	a+=s;
}
printf("%.2lf",1.0*a/n);

6.均值

【题目描述】
给出一组样本数据,包含n个浮点数,计算其均值,精确到小数点后4位。

【输入】
输入有两行,第一行包含一个整数n(n小于100),代表样本容量;第二行包含n个绝对值不超过1000的浮点数,代表各个样本数据。

【输出】
输出一行,包含一个浮点数,表示均值,精确到小数点后4位。

【输入样例】
2
1.0 3.0
【输出样例】
2.0000
int n;
cin>>n;
double a=0;
double s;
double h;
for(int i=1;i<=n;i++)
{
	cin>>s;
	a+=s;
}
printf("%.4lf",a/n);

7.求整数的和与均值

【题目描述】
读入n(1≤n≤10000)个整数,求它们的和与均值。

【输入】
输入第一行是一个整数n,表示有n个整数。

第2~n+1行每行包含1个整数。每个整数的绝对值均不超过10000。

【输出】
输出一行,先输出和,再输出平均值(保留到小数点后5位),两个数间用单个空格分隔。

【输入样例】
4
344
222
343
222
【输出样例】
 1131 282.75000
int n,b=0;
cin>>n;
double a=0;
double s;
double h;
for(int i=1;i<=n;i++)
{
	cin>>s;
	a+=s;
	b+=s;
}
printf("%d ",b);
printf("%.5lf",a/n);

8.最高的分数

【题目描述】
孙老师讲授的《计算概论》这门课期中考试刚刚结束,他想知道考试中取得的最高分数。因为人数比较多,他觉得这件事情交给计算机来做比较方便。你能帮孙老师解决这个问题吗?

【输入】
输入两行,第一行为整数n(1 <= n < 100),表示参加这次考试的人数.第二行是这n个学生的成绩,相邻两个数之间用单个空格隔开。所有成绩均为0到100之间的整数。

【输出】
输出一个整数,即最高的成绩。

【输入样例】
5
85 78 90 99 60
【输出样例】
99
int n; //数字总数 
cin>>n;
int sz=0;//存放每次输入的数字  

int d=0; //存放最大值 
for(int i=1;i<=n;i++)//重复输入n次 
{
	cin>>sz;//输入第二行的数字 
	if(d<sz)//判断新输入的值,是否比默认的值大 
	{
		d=sz;
	}
} 
cout<<d; 

9.最大跨度值

【题目描述】
给定一个长度为n的非负整数序列,请计算序列的最大跨度值(最大跨度值 = 最大值减去最小值)。

【输入】
一共2行,第一行为序列的个数n(1 <= n <= 1000),第二行为序列的n个不超过1000的非负整数,整数之间以一个空格分隔。

【输出】
输出一行,表示序列的最大跨度值。

【输入样例】
6
3 0 8 7 5 9
【输出样例】
9
int n; //数字总数 
cin>>n;
int sz=0; //存放每次输入的数字 
int x=1000;  //存放最小值 
int d=0;    //存放最大值 
for(int i=1;i<=n;i++)  //重复输入n次 
{
	cin>>sz;   //输入第二行的数字 
	if(sz>d)  //判断新输入的值,是否比默认的值大 
	{
		d=sz;
	}
	if(sz<x) //判断新输入的值,是否比默认的值小 
	{
		x=sz;
	}
}
cout<<d-x;

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
int n,jp=0,yp=0,tp=0;
int a,b,c;
cin>>n;
for (int i=1,x,y,z; i<=n; i++)
{
	cin>>x>>y>>z;
	jp += x;
	yp += y;
	tp += z;
}
cout<<jp<<" "<<yp<<" "<<tp<<" "<<jp+yp+tp<<endl;

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 a,b;
int sum=0;
int i;
cin>>a>>b;
if(a%2==0) a++;
for(i=a;i<=b;i+=2)
	sum+=i;
cout<<sum<<endl;

12.满足条件的数累加

【题目描述】
将正整数m和n之间(包括m和n)能被17整除的数累加,其中,0<m<n<1000。

【输入】
一行,包含两个整数m和n,其间,以一个空格间隔。

【输出】
输出一行,包行一个整数,表示累加的结果。

【输入样例】
50 85
【输出样例】
204
int a,b;
int sum=0;
int i;
cin>>a>>b;
if(a%2==0) a++;
for(i=a;i<=b;i++)
	if(i%17==0)
		sum+=i;


cout<<sum<<endl;

13与指定数字相同的数的个数

【题目描述】
输出一个整数序列中与指定数字相同的数的个数。输入包含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,c,s;
cin>>n>>m;
for(int i=1;i<=n;i++)
{
	cin>>s;
	if(s==m)
	{
		c++;
	}
}
cout<<c<<endl;

14.人口增长

【题目描述】
我国现有x亿人口,按照每年0.1%的增长速度,n年后将有多少人?保留小数点后四位。

【输入】
一行,包含两个整数x和n,分别是人口基数和年数,以单个空格分隔。

【输出】
输出最后的人口数,以亿为单位,保留到小数点后四位。1<=x<=100,1<=n<=100。

【输入样例】
13 10
【输出样例】
13.1306
double x,n;
int i;
cin>>x>>n;

for(int i=1;i<=n;i++)
{
	x=x*1.001;
}
printf("%.4lf\n",x);

15.菲波那契数

【题目描述】
菲波那契数列是指这样的数列: 数列的第一个和第二个数都为1,接下来每个数都等于前面2个数之和。给出一个正整数k,要求菲波那契数列中第k个数是多少。

【输入】
输入一行,包含一个正整数k。(1 ≤ k ≤ 46)

【输出】
输出一行,包含一个正整数,表示菲波那契数列中第k个数的大小。

【输入样例】
19
【输出样例】
4181
int k,a=1,b=1,c=1,i;
cin>>k;

for(int i=3;i<=k;i++)
{
	c=a+b;
	a=b;
	b=c;

}
printf("%d",c);

16.鸡尾酒疗法

【题目描述】
鸡尾酒疗法,指“高效抗逆转录病毒治疗”。人们在鸡尾酒疗法的基础上又提出了很多种改进的疗法。为了验证这些治疗方法是否在疗效上比鸡尾酒疗法更好,可用通过临床对照实验的方式进行。假设鸡尾酒疗法的有效率为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
int n,t,e;
cin>>n;
cin>>t>>e;
double x=(double)e/t,y;
for(int i=1;i<n;i++)
{
	cin>>t>>e;
	y=(double)e/t;
	if(y-x > 0.05)
		cout<<"better"<<endl;
	else if (x-y > 0.05)
		cout<<"worse"<<endl;
	else
		cout<<"same"<<endl;
}

17.药房管理

【题目描述】
随着信息技术的蓬勃发展,医疗信息化已经成为医院建设中必不可少的一部分。计算机可以很好地辅助医院管理医生信息、病人信息、药品信息等海量数据,使工作人员能够从这些机械的工作中解放出来,将更多精力投入真正的医疗过程中,从而极大地提高了医院整体的工作效率。

   对药品的管理是其中的一项重要内容。现在药房的管理员希望使用计算机来帮助他管理。假设对于任意一种药品,每天开始工作时的库存总量已知,并且一天之内不会通过进货的方式增加。每天会有很多病人前来取药,每个病人希望取走不同数量的药品。如果病人需要的数量超过了当时的库存量,药房会拒绝该病人的请求。管理员希望知道每天会有多少病人没有取上药。

【输入】
共3行,第一行是每天开始时的药品总量m。

第二行是这一天取药的人数n(0<n<=100)。

第三行共有n个数,分别记录了每个病人希望取走的药品数量(按照时间先后的顺序)。

【输出】
只有1行,为这一天没有取上药品的人数。

【输入样例】
30
6
10 5 20 6 7 8
【输出样例】
2
int n,m,sl,mqs=0;
cin>>m>>n;
for(int i=1;i<=n;i++)
{
	cin>>sl;
	if(m>=sl)
	{
		m-=sl;
	}
	else
	{
		mqs+=1;
	}
}
cout<<mqs;

18.正常血压

【题目描述】
监护室每小时测量一次病人的血压,若收缩压在90-140之间并且舒张压在60-90之间(包含端点值)则称之为正常,现给出某病人若干次测量的血压值,计算病人保持正常血压的最长小时数。

【输入】
第一行为一个正整数n(n<100),其后有n行,每行2个正整数,分别为一次测量的收缩压和舒张压。

【输出】
输出仅一行,血压连续正常的最长小时数。

【输入样例】
4
100 80
90 50
120 60
140 90
【输出样例】
2
int n;
scanf("%d",&n);
int a,b,c=0,d=0;
for(int i=0;i<n;i++)
{
	scanf("%d %d",&a,&b);
	if(a>=90 && a<=140 && b>=60 && b<=90)
	{
		c++;
		if(d<c)
		{
			d=c;
		}
	}
	else
	{
		c=0;	
	}
} 
printf("%d",d);

19.统计满足条件的4位数

【题目描述】
给定若干个四位数,求出其中满足以下条件的数的个数:个位数上的数字减去千位数上的数字,再减去百位数上的数字,再减去十位数上的数字的结果大于零。

【输入】
输入为两行,第一行为四位数的个数n,第二行为n个的四位数。(n<=100)

【输出】
输出为一行,包含一个整数,表示满足条件的四位数的个数。

【输入样例】
5
1234 1349 6119 2123 5017
【输出样例】
3
int n;
cin>>n;
int tot=0;
for(int i=1;i<=n;i++)
{
	int a;
	cin>>a;
	if((a%10-((a/1000)%10)-((a/100)%10)-((a/10)%10))>0)
		tot++;
}
cout<<tot; 

20.余数相同问题

【题目描述】
已知三个正整数a,b,c。现有一个大于1的整数x,将其作为除数分别除a,b,c,得到的余数相同。

请问满足上述条件的x的最小值是多少?数据保证x有解。

【输入】
一行,三个不大于1000000的正整数a,b,c,两个整数之间用一个空格隔开。

【输出】
一个整数,即满足条件的x的最小值。

【输入样例】
300 262 205
【输出样例】
19
int a,b,c;
cin>>a>>b>>c;
for(int i=2;i<=a;i++)
{
	if(a%i==b%i && b%i==c%i)
	{
		cout<<i;
		break;
	}
}

21.分苹果

【题目描述】
把一堆苹果分给n个小朋友,要使每个人都能拿到苹果,而且每个人拿到的苹果数都不同的话,这堆苹果至少应该有多少个?

【输入】
一个不大于1000的正整数n,代表小朋友人数。

【输出】
一个整数,表示满足条件的最少苹果个数。

【输入样例】
8
【输出样例】
36
int n,a=0;
cin>>n;
for(int i=1;i<=n;i++)
{
	a+=i;	
}
cout<<a;

22.第几项

【题目描述】
对于正整数n,m
,求s=1+2+3……+n
,当加到第几项时,s
的值会超过m
?

【输入】
输入m
。

【输出】
输出n
。

【输入样例】
1000
【输出样例】
45
int i,x=0,d=1000;
float p=0,g=0;
while (scanf("%d",&i)==1)
{
	p+=1;
	g+=i;
	if(x<i)
	{
		x=i;
	}
	if(d>i)
	{
		d=i;
	}
}
printf("%d %d %.3f",d,x,g/p);

24.球弹跳高度的计算

【题目描述】
一球从某一高度h
ℎ
落下(单位米),每次落地后反跳回原来高度的一半,再落下。编程计算气球在第10
10
次落地时,共经过多少米? 第10
10
次反弹多高?

输出包含两行,第1行:到球第10
10
次落地时,一共经过的米数。第2行:第10
10
次弹跳的高度。

【输入】
输入一个整数h
ℎ
,表示球的初始高度。

【输出】
第1行:到球第10
10
次落地时,一共经过的米数。

第2行:第10
10
次弹跳的高度。

注意:结果可能是实数,结果用double类型保存。

提示:输出时不需要对精度特殊控制,用cout << ANSWER,或者printf("\%g",ANSWER)即可。

【输入样例】
20
【输出样例】
59.9219
0.0195312
int i=1;
double h,w=0,j=0;
cin>>h;
w=h;
do
{
	j+=h;
	h=h/2;
	i++;
}while(i<=10); 
cout<<j*2-w<<endl<<h;

25角谷猜想

【题目描述】
谓角谷猜想,是指对于任意一个正整数,如果是奇数,则乘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
int n;
cin>>n;
if(n==1)
{
	cout<<"End";
}
else
{
	do
	{
		if(n%2==0)
		{
			printf("%d/2=%d \n",n,n/2);
			n=n/2;
		}
		else if(n%2==1)
		{
			printf("%d*3+1=%d \n",n,n*3+1);
			n=n*3+1;
		}
	}while(n>1);
}
cout<<"End";

26.级数求和

【题目描述】
已知:Sn=1+12+13+…+1n
。显然对于任意一个整数k
,当n
足够大的时候,Sn
大于k
。现给出一个整数k(1<=k<=15)
,要求计算出一个最小的n
,使得Sn>k
。

【输入】
一个整数k
。

【输出】
一个整数n
。

【输入样例】
1
【输出样例】
2
int k,i=1;
double n=0;
cin>>k;
do
{
	n+=1.0/i;
	i++;
}while(k>=n);
cout<<i-1;

27.分离整数的各个数

【题目描述】
给定一个整数n(1≤n≤100000000)
,要求从个位开始分离出它的每一位数字。从个位开始按照从低位到高位的顺序依次输出每一位数字。

【输入】
输入一个整数,整数在1
到100000000
之间。

【输出】
从个位开始按照从低位到高位的顺序依次输出每一位数字。数字之间以一个空格分开。

【输入样例】
123
【输出样例】
3 2 1
int a,j=0;
cin>>a;
do
{
	j=j*10+a%10;
	a/=10;
}while(a);
cout<<j;

29.含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
int n,k,sum=0;
cin>>n>>k;
if(n%19==0)
{
	do
	{
		if(n%10==3)
		{
			sum++;
		}
		n/=10;
	}while(n);
	if(sum==k)
	{
		cout<<"YES";
	}
	else
	{
		cout<<"NO";
	}
}
else
{
	cout<<"NO";
}

30.末两位数

【题目描述】
求n
个1992
的乘积的末两位数是多少?

【输入】
输入n
。

【输出】
如题述的末两位数。

【输入样例】
3
【输出样例】
88
int n=1;
do
{
	if(n%2==1 && n%3==1 && n%4==1 && n%5==1 && n%6==1 && n%7==0)
	{
		cout<<n;
		break;
	}
	n++;
}while(n);