信息学奥赛一本通 第四章

发布时间 2023-11-19 13:22:22作者: 黄晟Dog

第一节 for循环

2016:【例4.1】for循环求和

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

【输入】
输入n。

【输出】
如题述,之和。

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

对于100%的数据,1≤n≤100。
#include <iostream>
 
using namespace std;
 
int main()
{
    int n;
    cin>>n;
    int s=0;
 
    for(int i=1;i<=n;i++)
    {
        s=s+i;
    }
 
    cout<<s;
    return 0;
}

2017:【例4.2】输出偶数

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

【输入】
输入n。

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

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

对于所有数据,1≤n≤100。
#include<iostream>
using namespace std;
 
int main()
{
    int n;
    cin>>n;
 
    for(int i=1;i<=n;i++)
    {
        if(i%2==0) cout<<i<<" ";
    }
 
    return 0;
}

2018:【例4.3】输出奇偶数之和

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

【输入】
输入n。

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

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

对于所有数据,1≤n≤100。
#include <iostream>
using namespace std;
 
int main()
{
    int n;
    int sum1=0,sum2=0;
 
    cin>>n;
 
    for(int i=0;i<=n;i++)
    {
        if(i%2==0) sum1=sum1+i;
        else sum2=sum2+i;
    }
 
    cout<<sum1<<" "<<sum2;
 
    return 0;

}

2019:【例4.4】求阶乘

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

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

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

【输出】
输出n!
的值。

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

对于所有数据,1≤n≤20。
#include<iostream>
using namespace std;
int main()
{
    int n;
    cin>>n;
    long long s=1;
    for(int i=1;i<=n;i++)
    {
        s=s*i;
    }
    cout<<s;
    return 0;
}

1059:求平均年龄

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

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

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

【输入样例】
2
18
17
【输出样例】
17.50
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
    int n,i,a;
    float sum=0;
    float av;
    cin>>n;
    for(i=1;i<=n;i++)
    {   
        scanf("%d",&a);
        sum=sum+a;
    }
    printf("%.2f",sum/n);
    return 0;
}

1060:均值

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

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

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

【输入样例】
2
1.0 3.0
【输出样例】
2.0000
#include<iostream>
using namespace std;
int main(){
	int N;
	double sum,n;
	cin>>N;
	for(int i=1;i<=N;i++){
		cin>>n;
		sum=sum+n;
	}
	sum=sum/N;
	printf("%.4f",sum);
	return 0;
}

1061:求整数的和与均值

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

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

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

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

【输入样例】
4
344
222
343
222
【输出样例】
 1131 282.75000
#include<cstdio>
using namespace std;
int n,m,i,t;
double s=0;    
int main()
{
	scanf("%d",&n);
	for(i=1;i<=n;i++)   
	{
		scanf("%d",&m);
		s=s+m;
	}
	t=s;
	printf("%d",t);
	printf(" %.5lf",s/n);
	return 0;
}

1062:最高的分数

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

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

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

【输入样例】
5
85 78 90 99 60
【输出样例】
99
#include<iostream>
using namespace std;
int main()
{
	int a,b,max=0;
	cin>>a;
	for(int i=1;i<=a;i++)
	{
		cin>>b;
		if(b>max) max=b;
	}
	cout<<max;
	return 0;
}

1063:最大跨度值

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

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

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

【输入样例】
6
3 0 8 7 5 9
【输出样例】
9
#include<iostream>
using namespace std;
int main()
{
	int a,b,max=0,min=10000;
	cin>>a;
	for(int i=1;i<=a;i++)
	{
		cin>>b;
		if(b>max) max=b;
		if(b<min) min=b;
	}
	cout<<max-min;
	return 0;
}

1064:奥运奖牌计数