第四章 循环结构的程序设计
第一节 for语句
T1059 : 求平均年龄
时间限制: 1000 ms 内存限制: 65536 KB
【题目描述】
班上有学生若干名,给出每名学生的年龄(整数),求班上所有学生的平均年龄,保留到小数点后两位。
【输入】
第一行有一个整数 n ( 1 ≤ n ≤ 100 ) n(1≤n≤100) n(1≤n≤100),表示学生的人数。其后 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(1≤n≤10000)个整数,求它们的和与均值。
【输入】
输入第一行是一个整数 n n n,表示有 n n n个整数。
第 2 − n + 1 2-n+1 2−n+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 < 100 ) n(1≤n<100) n(1≤n<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(1≤n≤1000),第二行为序列的 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) (1≤n≤17)。现在要统计一下 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 0≤m≤n≤300。
【输出】
输出一行,包含一个整数,表示 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 < m < n < 1000 0<m<n<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 < k < 100 ) k(1<k<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) (N≤100)和指定的数字;第 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) (N≤100)和指定的数字, 中间用一个空格分开;
第 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(−1000000≤a≤1000000,1≤n≤10000),求乘方 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