實戰訓練1—最大差值
問題描述:
輸入n個非負整數,找出這個n整數的最大值與最小值,并求最大值和最小值的差值。
輸入格式:
共兩行,第一行為整數的個數 n(1≤n≤1000)。第二行為n個整數的值(整數值在int類型表示范圍之內),整數之間以一個空格分隔。
輸出格式:
輸出一行,n個整數中的最大值,最小值和差值,并用空格隔開。
輸入輸出樣例:
輸入樣例1 | 輸出樣例1 |
5 3 7 1 2 9 | 9 1 8? |
輸入樣例2 | 輸出樣例2 |
8 13 20 4 9 35 8 46 3 | 46 3 43 |
問題分析:
根據題意,求n個整數的最大值、最小值以差值,首先定義最大值變量和最小值變量來維護當前已經出現整數中的最大值和最小值,然后需要重復輸入n次整數,到目前并且在輸入每一個整數之后依次和當前的最大值與最小值比較,如果比最大值大,將最大值修改為當前輸入的整數值,如果比最小值小,將最小值修改為當前輸入的整數值,在n次輸入比較之后,輸出最大值、最小值和兩者的差值,可以采用循環來實現,循環變量初始值為1,終值為n,循環變量更新為自增運算,循環體內輸入整數值,并進行比較,具體程序代碼如下:
#include<bits/stdc++.h>
using namespace std;
int main(){int n,minv= INT_MAX,maxv=INT_MIN;//定義整數個數變量n,n個整數的最小值minv并初始化為整數的最大值,n個整數的最大值maxv并初始化為整數最小值 cin>>n;//輸入變量n for(int i=0;i<n;i++){//重復n次整數,并比較 int tmp;//定義輸入整數變量tmp cin>>tmp;//輸入整數的值 if(tmp<minv){ //tmp比最小值小,將tmp設置為minv minv = tmp;}else if(tmp>maxv){//tmp比最大值大,將tmp設置為maxv maxv = tmp;}} cout<<maxv<<' '<<minv<<' '<<(maxv-minv)<<endl;//輸出最大值、最小值和差值 return 0;
}
實戰訓練2—某國人口
問題描述:
某國家有x億人口,如果按照每年 0.1% 的速度增長,n年后該國將會有多人?人數保留小數點后四位。
輸入格式:
一行,包含兩個整數 x 和 n,分別是人口基數和年數,以單個空格分隔。
輸出格式:
輸出該國家n年后的人口數量,以億為單位,保留到小數點后四位。
輸入輸出樣例:
輸入樣例1 | 輸出樣例1 |
12 10 | 12.1205 |
輸入樣例2 | 輸出樣例2 |
13 5 | 13.0651 |
問題分析:
根據題意,首先需要輸入當前這個國家的人口數x,以及年數n,兩者均為int類型,1年后人數在人口基數上增加了0.1%,所以人數為x*1.001,2年后在此基礎上再增加了0.1%,繼續乘以1.001,依次下去,可以發現人口數量計算可以采用累乘的思想來解決,具體程序實現使用for循環來解決,循環變量初始值為1,終值為n,更新為自增運算,循環體中進行累乘,同時需要明確數據類型,人口數量起始值為整數,由于增長率為小數,所以在定義人口數時,采用double數據類型,具體程序代碼如下:
#include<bits/stdc++.h>
using namespace std;
int main() {int x,n;//定義初始人口數變量x和年變量n double sum;//定義人口總數變量sum cin>>x>>n;//輸入x和n sum = x;//將sum修改為開始人口數x for(int i=1; i<=n; i++) {//使用循環進行累乘 sum = sum *1.001;//使用累乘計算人口數 }printf("%0.4lf\n",sum);return 0;
}
實戰訓練3—多邊形內角和
問題描述:
在歐幾里德幾何中,n 邊形的內角和是(n?2)×180°。已知其中(n?1) 個內角的度數,就能計算出剩下的一個未知內角的度數。請編寫一個程序,來解決這個問題。
輸入格式:
共兩行。其中第 1 行只有一個整數 n,第 2 行有 (n-1)個正整數,這n-1個整數是每個已知內角的度數。相鄰兩個整數之間用單個空格隔開。數據保證給定多邊形合法。
輸出格式:
一個正整數為未知內角的度數。
輸入輸出樣例:
輸入樣例1 | 輸出樣例1 |
3 50 50? | 80 |
輸入樣例2 | 輸出樣例2 |
4 45 90 90? | 135 |
問題分析:
依據題意,對于n邊形的n個內角之和為(n?2)×180°,已知其中的n-1個角的度數,求剩余一個角的度數,可以將n-1個角的度數進行求和,利用累加的思想,然后用總度數減去n-1個度數總和,采用for循環實現,循環變量初始值為1,終值為n-1,循環變量更新為自增運算,循環體內輸入角度數并進行累加,具體程序代碼如下:
#include<bits/stdc++.h>
using namespace std;
int main(){int n,sum=0,subsum=0;//定義n邊形變量n、總的內角和sum并將sum初始值設置為0 n-1角的和subsum并初始化為0 cin>>n;//輸入n sum = (n-2)*180;//n邊形內角總和 for(int i=1;i<n;i++){//依次輸入n-1個角的度數,并進行累加 int tmp; //定義角度數 cin>>tmp;//輸入角度數 subsum += tmp;//累加角度數到和變量subsum }cout<<(sum-subsum)<<endl;//輸出角的度數 return 0;
}
除此之外,也可以采用累減的思想,用內角總和依次減去n-1個度數,sum剩余的值就是最后一個角的度數,同理采用循環來實現,循環變量初始值為1,終值為n-1,更新為自增運算,循環體內用內角總和依次減去輸入的內角度數,具體程序代碼如下:
#include<bits/stdc++.h>
using namespace std;
int main(){int n,sum=0;//定義n邊形變量n、總的內角和sum并將sum初始值設置為0 cin>>n;//輸入n sum = (n-2)*180;//n邊形內角總和 for(int i=1;i<n;i++){//依次輸入n-1個角的度數,并進行累減 int tmp; //定義角度數 cin>>tmp;//輸入角度數 sum -= tmp;//依次累減每個角度 }cout<<sum<<endl;//輸出角的度數 return 0;
}