資訊學奧賽一本通(C++版)第一部分 C++語言 第四章 迴圈結構的程式設計
第四章 迴圈結構的程式設計
第一節 for語句
T1059 : 求平均年齡
時間限制: 1000 ms 記憶體限制: 65536 KB
【題目描述】
班上有學生若干名,給出每名學生的年齡(整數),求班上所有學生的平均年齡,保留到小數點後兩位。
【輸入】
第一行有一個整數,表示學生的人數。其後行每行有個整數,表示每個學生的年齡,取值為到。
【輸出】
輸出一行,該行包含一個浮點數,為要求的平均年齡,保留到小數點後兩位。
【輸入樣例】
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
【題目描述】
給出一組樣本資料,包含個浮點數,計算其均值,精確到小數點後位。
【輸入】
輸入有兩行,第一行包含一個整數(小於),代表樣本容量;第二行包含個絕對值不超過的浮點數,代表各個樣本資料。
【輸出】
輸出一行,包含一個浮點數,表示均值,精確到小數點後位。
【輸入樣例】
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
【題目描述】
讀入個整數,求它們的和與均值。
【輸入】
輸入第一行是一個整數,表示有個整數。
第行每行包含個整數。每個整數的絕對值均不超過。
【輸出】
輸出一行,先輸出和,再輸出平均值(保留到小數點後位),兩個數間用單個空格分隔。
【輸入樣例】
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
【題目描述】
孫老師講授的《計算概論》這門課期中考試剛剛結束,他想知道考試中取得的最高分數。因為人數比較多,他覺得這件事情交給計算機來做比較方便。你能幫孫老師解決這個問題嗎?
【輸入】
輸入兩行,第一行為整數,表示參加這次考試的人數.第二行是這個學生的成績,相鄰兩個數之間用單個空格隔開。所有成績均為到之間的整數。
【輸出】
輸出一個整數,即最高的成績。
【輸入樣例】
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
【題目描述】
給定一個長度為的非負整數序列,請計算序列的最大跨度值(最大跨度值最大值減去最小值)。
【輸入】
一共行,第一行為序列的個數,第二行為序列的個不超過的非負整數,整數之間以一個空格分隔。
【輸出】
輸出一行,表示序列的最大跨度值。
【輸入樣例】
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
【題目描述】
年北京奧運會,國的運動員參與了天的決賽專案。現在要統計一下國所獲得的金、銀、銅牌數目及總獎牌數。輸入第行是國參與決賽專案的天數,其後行,每一行是該國某一天獲得的金、銀、銅牌數目。輸出個整數,為國所獲得的金、銀、銅牌總數及總獎牌數。
【輸入】
輸入行,第行是國參與決賽專案的天數,其後行,每一行是該國某一天獲得的金、銀、銅牌數目,以一個空格分開。
【輸出】
輸出行,包括個整數,為國所獲得的金、銀、銅牌總數及總獎牌數,以一個空格分開。
【輸入樣例】
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
【題目描述】
計算非負整數到(包括和)之間的所有奇數的和,其中,不大於,且不大於。例如,其和則為:。
【輸入】
兩個數和,兩個數以一個空格分開,其中。
【輸出】
輸出一行,包含一個整數,表示到(包括和)之間的所有奇數的和。
【輸入樣例】
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
【題目描述】
將正整數和之間(包括和)能被整除的數累加,其中。
【輸入】
一行,包含兩個整數和,其間,以一個空格間隔。
【輸出】
輸出一行,包行一個整數,表示累加的結果。
【輸入樣例】
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
【題目描述】
給定個正整數,其中每個數都是大於等於,小於等於的數。寫程式計算給定的個正整數中,出現的次數。
【輸入】
輸入有兩行:第一行包含一個正整數,第二行包含個正整數,每兩個正整數用一個空格分開。
【輸出】
輸出有三行,第一行為出現的次數,,第二行為出現的次數,第三行為出現的次數。
【輸入樣例】
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