信息学奥赛一本通(C++版)第一部分 C++语言 第四章 循环结构的程序设计

第四章 循环结构的程序设计

第一节 for语句

T1059 : 求平均年龄

时间限制: 1000 ms 内存限制: 65536 KB

【题目描述】

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

【输入】

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

【输出】

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

【输入样例】
2
18
17
【输出样例】
17.5
【答案&代码】
#include<cstdio>
//以上为头文件

int n,temp;
//以上为全局变量

int main(void){
   
	register int i,sum=0;
	//以上为寄存器变量
	scanf("%d",&n);
	for(i=1;i<=n;++i)
		scanf("%d",&temp),
		sum+=temp;
	printf("%.2f\n",(double)sum/n);
	return 0;
}

T1060 : 均值

时间限制: 1000 ms 内存限制: 65536 KB

【题目描述】

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

【输入】

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

【输出】

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

【输入样例】
2
1.0 3.0
【输出样例】
2.0000
【答案&代码】
#include<cstdio>
//以上为头文件

int n;
double temp;
//以上为全局变量

int main(void){
   
	register int i;
	register double sum=0;
	//以上为寄存器变量
	scanf("%d",&n);
	for(i=1;i<=n;++i)
		scanf("%lf",&temp),
		sum+=temp;
	printf("%.4f\n",sum/n);
	return 0;
}

T1061 : 求整数的和与均值

时间限制: 1000 ms 内存限制: 65536 KB

【题目描述】

  读入 n ( 1 ≤ n ≤ 10000 ) n(1≤n≤10000) n(1n10000)个整数,求它们的和与均值。

【输入】

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

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

【输出】

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

【输入样例】
4
344
222
343
222
【输出样例】
1131 282.75000
【答案&代码】
#include<cstdio>
//以上为头文件

int n,temp;
//以上为全局变量

int main(void){
   
	register int i,sum=0;
	//以上为寄存器变量
	scanf("%d",&n);
	for(i=1;i<=n;++i)
		scanf("%d",&temp),
		sum+=temp;
	printf("%d %.5f\n",sum,(double)sum/n);
	return 0;
}

T1062 : 最高的分数

时间限制: 1000 ms 内存限制: 65536 KB

【题目描述】

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

【输入】

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

【输出】

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

【输入样例】
5
85 78 90 99 60
【输出样例】
99
【答案&代码】
#include<cstdio>
//以上为头文件

int n,temp;
//以上为全局变量

int main(void){
   
	register int i,MAX=-1;
	//以上为寄存器变量
	scanf("%d",&n);
	for(i=1;i<=n;++i){
   
		scanf("%d",&temp);
		if(temp>MAX)
			MAX=temp;
	}
	printf("%d\n",MAX);
	return 0;
}

T1063 : 最大跨度值

时间限制: 1000 ms 内存限制: 65536 KB

【题目描述】

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

【输入】

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

【输出】

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

【输入样例】
6
3 0 8 7 5 9
【输出样例】
9
【答案&代码】
#include<cstdio>
//以上为头文件

int n,temp;
//以上为全局变量

int main(void){
   
	register int i,MAX=-1,MIN=1001;
	//以上为寄存器变量
	scanf("%d",&n);
	for(i=1;i<=n;++i){
   
		scanf("%d",&temp);
		if(temp>MAX)
			MAX=temp;
		if(temp<MIN)
			MIN=temp;
	}
	printf("%d\n",MAX-MIN);
	return 0;
}

T1064 : 奥运奖牌计数

时间限制: 1000 ms 内存限制: 65536 KB

【题目描述】

   2008 2008 2008年北京奥运会, A A A国的运动员参与了 n n n天的决赛项目 ( 1 ≤ n ≤ 17 ) (1≤n≤17) (1n17)。现在要统计一下 A A A国所获得的金、银、铜牌数目及总奖牌数。输入第 1 1 1行是 A A A国参与决赛项目的天数 n n n,其后 n n n行,每一行是该国某一天获得的金、银、铜牌数目。输出 4 4 4个整数,为 A A A国所获得的金、银、铜牌总数及总奖牌数。

【输入】

  输入 n + 1 n+1 n+1行,第 1 1 1行是 A A A国参与决赛项目的天数 n n n,其后 n n n行,每一行是该国某一天获得的金、银、铜牌数目,以一个空格分开。

【输出】

  输出 1 1 1行,包括 4 4 4个整数,为 A A A国所获得的金、银、铜牌总数及总奖牌数,以一个空格分开。

【输入样例】
3
1 0 3
3 1 0
0 3 0
【输出样例】
4 4 3 11
【答案&代码】
#include<cstdio>
//以上为头文件

int n,sum[4],temp[4];
//以上为全局变量

int main(void){
   
	register int i,j;
	//以上为寄存器变量
	scanf("%d",&n);
	for(i=1;i<=n;++i)
		for(j=1;j<=3;++j)
			scanf("%d",&temp[j]),
			sum[j]+=temp[j];
	for(i=1;i<=3;++i)
		printf("%d ",sum[i]);
	printf("%d\n",sum[1]+sum[2]+sum[3]);
	return 0;
}

T1065 : 奇数求和

时间限制: 1000 ms 内存限制: 65536 KB

【题目描述】

  计算非负整数 m m m n n n(包括 m m m n n n)之间的所有奇数的和,其中, m m m不大于 n n n,且 n n n不大于 300 300 300。例如 m = 3 , n = 12 m=3,n=12 m=3,n=12,其和则为: 3 + 5 + 7 + 9 + 11 = 35 3+5+7+9+11=35 3+5+7+9+11=35

【输入】

  两个数 m m m n n n,两个数以一个空格分开,其中 0 ≤ m ≤ n ≤ 300 0≤m≤n≤300 0mn300

【输出】

  输出一行,包含一个整数,表示 m m m n n n(包括 m m m n n n)之间的所有奇数的和。

【输入样例】
7 15
【输出样例】
55
【答案&代码】
#include<cstdio>
//以上为头文件

int m,n;
//以上为全局变量

int main(void){
   
	register int sum=0;
	//以上为寄存器变量
	scanf("%d%d",&m,&n);
	for(;m<=n;++m)
		if(m&1)
			sum+=m;
	printf("%d\n",sum);
	return 0;
}

T1066 : 满足条件的数累加

时间限制: 1000 ms 内存限制: 65536 KB

【题目描述】

  将正整数 m m m n n n之间(包括 m m m n n n)能被 17 17 17整除的数累加,其中 0 &lt; m &lt; n &lt; 1000 0&lt;m&lt;n&lt;1000 0<m<n<1000

【输入】

  一行,包含两个整数 m m m n n n,其间,以一个空格间隔。

【输出】

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

【输入样例】
50 85
【输出样例】
204
【答案&代码】
#include<cstdio>
//以上为头文件

int m,n;
//以上为全局变量

int main(void){
   
	register int sum=0;
	//以上为寄存器变量
	scanf("%d%d",&m,&n);
	for(;m<=n;++m)
		if(m%17==0)
			sum+=m;
	printf("%d\n",sum);
	return 0;
}

T1067 : 整数的个数

时间限制: 1000 ms 内存限制: 65536 KB

【题目描述】

  给定 k ( 1 &lt; k &lt; 100 ) k(1&lt;k&lt;100) k(1<k<100)个正整数,其中每个数都是大于等于 1 1 1,小于等于 10 10 10的数。写程序计算给定的 k k k个正整数中, 1 , 5 , 10 1,5,10 1,5,10出现的次数。

【输入】

  输入有两行:第一行包含一个正整数 k k k,第二行包含 k k k个正整数,每两个正整数用一个空格分开。

【输出】

  输出有三行,第一行为 1 1 1出现的次数,,第二行为 5 5 5出现的次数,第三行为 10 10 10出现的次数。

【输入样例】
5
1 5 8 10 5
【输出样例】
1
2
1
【答案&代码】
#include<stdio.h>
int main(void){
   
	int k;
	scanf("%d",&k);
	int sum[3]={
   0};
	for(int i=0;i<k;i++){
   
		int temp;
		scanf("%d",&temp);
		if(temp==1)
			sum[0]+=1;
		else if(temp==5)
			sum[1]+=1;
		else if(temp==10)
			sum[2]+=1;
	}
	printf("%d\n%d\n%d\n",sum[0],sum[1],sum[2]);
	return 0;
}

T1068 : 与指定数字相同的数的个数

时间限制: 1000 ms 内存限制: 65536 KB

【题目描述】

  输出一个整数序列中与指定数字相同的数的个数。输入包含 2 2 2行:第 1 1 1行为 N N N m m m,表示整数序列的长度 ( N ≤ 100 ) (N≤100) (N100)和指定的数字;第 2 2 2行为 N N N个整数,整数之间以一个空格分开。输出为 N N N个数中与 m m m相同的数的个数。

【输入】

  第 1 1 1行为 N N N m m m,表示整数序列的长度 ( N ≤ 100 ) (N≤100) (N100)和指定的数字, 中间用一个空格分开;

  第 2 2 2行为 N N N个整数,整数之间以一个空格分开。

【输出】

  输出为 N N N个数中与 m m m相同的数的个数。

【输入样例】
3 2
2 3 2
【输出样例】
2
【答案&代码】
#include<cstdio>
int main(void){
   
	int n,m;
	scanf("%d%d",&n,&m);
	int sum=0;
	for(int i=0;i<n;i++){
   
		int temp;
		scanf("%d",&temp);
		if(temp==m)
			sum+=1;
	}
	printf("%d\n",sum);
	return 0;
}

T1069 : 乘方计算

时间限制: 1000 ms 内存限制: 65536 KB

【题目描述】

  给出一个整数 a a a和一个正整数 n ( − 1000000 ≤ a ≤ 1000000 , 1 ≤ n ≤ 10000 ) n(-1000000≤a≤1000000,1≤n≤10000) n(1000000a1000000,1n10000),求乘方 a n a^{n} an,即乘方结果。最终结果的绝对值不超过 1000000 1000000 1000000

【输入】

  一行,包含两个整数 a a a n n n − 1000000 ≤ a ≤ 1000000 , 1 ≤ n ≤ 10000 -1000000≤a≤1000000,1≤n≤10000 1

  • 5
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
信息学奥赛一本通C》是一本电子书,专为准备参加信息学竞赛的学生而编写的。该书内容丰富,系统性强,对信息学相关知识进行了全面的介绍和解析。它旨在帮助读者全面了解和掌握信息学的基本概念、算法设计和编程技巧。 《信息学奥赛一本通C》的主要特点是: 1.全面的知识点覆盖:该书涵盖了信息学竞赛常见的核心知识点,包括结构、算法设计与分析、图论、动态规划等。读者可以系统地学习每个知识点,掌握其原理和应用方法。 2.详细的解思路:书中为每个知识点的典型题目都提供了详细的解思路和步骤分析。这些解思路能够帮助读者理解算法的设计过程,并能够应用到不同的实际问中。 3.丰富的编程实例:书中配有丰富的编程实例,涵盖了各个知识点的不同应用场景。读者可以通过这些实例来巩固所学的知识,并提升编程能力。 4.易于阅读和学习:该电子书采用清晰简洁的语言结构也很清晰,方便读者进行阅读和学习。同时,配有大量图表和示意图,便于理解和记忆。 总之,《信息学奥赛一本通C》是一本理论与实践相结合的电子书,适合参加信息学竞赛的学生使用。它不仅提供了全面的理论知识,还提供了实际问的解决思路和实例,帮助读者系统地学习和掌握信息学竞赛所需的基本知识和技巧。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值