noip第6課作業


1.    數據統計

【問題描述】

輸入N個整數,求出它們的最小值、最大值和平均值(保留3位小數)。輸入保證這些數都是不超過1000的整數。(1<=N<=1000)

【樣例輸入】

8

2 8 3 5 1 7 3 6

【樣例輸出】

1 8 4.375

#include <iostream>
#include <iomanip> 
using namespace std;
int main(){
    int n, m, sum = 0, min, max, k;
    cin >> n;
    k=n;
    cin >> m;
    min = max = sum = m;
    while(n-1>0){
        cin >> m;
        sum += m;
        if(min>m){
            min=m;
        }
        if(max<m){
            max=m;
        }
        n--;
    }
    cout << min << " " << max << " ";
    cout << fixed << setprecision(3) << (double)sum/k << endl;
    return 0;
}

2.    角谷猜想

【問題描述】

所謂角谷猜想,是指對於任意一個正整數,如果是奇數,則乘3加1,如果是偶數,則除以2,得到的結果再按照上述規則重復處理,最終總能夠得到1。如,假定初始整數為5,計算過程分別為16、8、4、2、1。

程序要求輸入一個整數,將經過處理得到1的過程輸出來。

輸入:一個正整數N(N <= 2,000,000)

輸出:從輸入整數到1的步驟,每一步為一行,每一部中描述計算過程。最后一行輸出"End"。如果輸入為1,直接輸出"End"。

【樣例輸入】

5

【樣例輸出】

5*3+1=16

16/2=8

8/2=4

4/2=2

2/2=1

End

#include<iostream>
using namespace std;
int main(){
    long long int n;
    cin>>n;
    while(n>1){
        if(n%2){
            n=3*n+1;
            cout<<(n-1)/3<<"*3+1="<<n<<endl;
        }else{
            n=n/2;
            cout<<2*n<<"/2="<<n<<endl;
        }
    }
    cout<<"End"<<endl;
    return 0;
}

1.    小玉游泳

【問題描述】

小玉開心地在游泳,可是她很快難過的發現,自己的力氣不夠,游泳好累哦。已知小玉第一步能游2米,可是隨着越來越累,力氣越來越小,她接下來的每一步都只能游出上一步距離的98%。現在小玉想知道,如果要游到距離x米的地方,她需要游多少步呢。請你編程解決這個問題。

輸入格式:輸入一個數字(不一定是整數,小於100m),表示要游的目標距離。

輸出格式:輸出一個整數,表示小玉一共需要游多少步。

【樣例輸入】

4.3

【樣例輸出】

3

#include <iostream>
using namespace std;
int main(){
    double m, n, l=2, step=0;
    cin >> m;
    while(n<m){
        step++;
        n+=l;
        l*=0.98;
    }
    cout << step << endl;
    return 0;
}

2.    球彈跳高度的計算

【問題描述】

一球從某一高度落下(整數,單位米),每次落地后反跳回原來高度的一半,再落下。編程計算氣球在第10次落地時,共經過多少米? 第10次反彈多高?

輸入:輸入一個整數h,表示球的初始高度。

輸出:輸出包含兩行:

第1行:到球第10次落地時,一共經過的米數。

第2行:第10次彈跳的高度。

注意:結果可能是實數,結果用double類型保存。

【樣例輸入】

20

【樣例輸出】

59.9219

0.0195312

#include <iostream>
#include <iomanip>
using namespace std;
int main(){
    double h, sum, n=10;
    cin >> h;
    sum=h;
    while(n-1>0){
        sum+=h;
        h/=2;
        n--; 
    }
    cout << fixed << setprecision(4) << sum << endl;
    cout << fixed << setprecision(4) << h/2 << endl;
    return 0;
}
//思路:球第一次落地經過h,然后彈起高度為二分之一h,
//彈起再落地所經過的路徑還是h 

3.    金幣

【問題描述】

國王將金幣作為工資,發放給忠誠的騎士。第一天,騎士收到一枚金幣;之后兩天(第二天和第三天)里,每天收到兩枚金幣;之后三天(第四、五、六天)里,每天收到三枚金幣;之后四天(第七、八、九、十天)里,每天收到四枚金幣……這種工資發放模式會一直這樣延續下去:當連續N天每天收到N枚金幣后,騎士會在之后的連續N+1天里,每天收到N+1枚金幣(N為任意正整數)。

你需要編寫一個程序,確定從第一天開始的給定天數內,騎士一共獲得了多少金幣。

輸入:一個整數(范圍1到10000),表示天數。

輸出:騎士獲得的金幣數。

【樣例輸入】

6

【樣例輸出】

14

#include <iostream>
using namespace std;
int main(){
    int n, sum=0;
    int i=0;
    cin >> n;
    while(n>0){
        i++;
        sum+=i*i;
        n-=i;    
    }
    sum += n*i;
    cout << sum << endl;
    return 0;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM