C++ 華為OJ 猴子分桃

來源:互聯網
上載者:User

標籤:猴子分桃   華為oj   迭代   遞迴   

【題目描述】
老猴子辛苦了一輩子,給那群小猴子們留下了一筆巨大的財富——一大堆桃子。老猴子決定把這些桃子分給小猴子。
第一個猴子來了,它把桃子分成五堆,五堆一樣多,但還多出一個。它把剩下的一個留給老猴子,自己拿走其中的一堆。
第二個猴子來了,它把桃子分成五堆,五堆一樣多,但又多出一個。它把多出的一個留給老猴子,自己拿走其中的一堆。 
後來的小猴子都如此照辦。最後剩下的桃子全部留給老猴子。 

這裡有n只小猴子,請你寫個程式計算一下在開始時至少有多少個桃子,以及最後老猴子最少能得到幾個桃子。


【輸入】

輸入包括多組測試資料。

每組測試資料包括一個整數n(1≤n≤20)。

輸入以0結束,該行不做處理。


【輸出】

每組測試資料對應一行輸出。

包括兩個整數a,b。 

分別代表開始時最小需要的桃子數,和結束後老猴子最少能得到的桃子數。


【樣本輸入】
5

1

0


【樣本輸出】

3121 1025

1 1

【演算法思想】

求特徵函數: a1=a1-(a1-1)/5  ;a1=1          

求通項公式 :{an-1}={a1-1}q^(n-1)={a1-1}(4/5)^(n-1)

【屌絲代碼】

#include <stdio.h>

#include <iostream>

int main()

{

    int n, i;

    int sum, l, t;

    while (scanf("%d", &n)==1 && n)

{

        l = 1;

        for (i=1; i<n; i++)

            l *= 5;

        sum = 1+5*(l-1);

        t = sum;

        for (i=1; i<=n-1; i++)

            t = (t-1)/5*4;

        printf("%d %d\n", sum, t+n);

    }

printf("%d %d\n", sum, t+n);

    return 0;

}

【吊軌代碼】

#include<iostream>  

#include<cmath>  

using namespace std;  

int main()  

{  

    int n;  

    long long total_num,old_num;  

    while(cin>>n && n!=0)  

    {  

        total_num=pow(5,n)-4;  

        old_num=n+pow(0.8,n)*pow(5,n)-4;  

        cout<<total_num<<" "<<old_num<<endl;  

    }  

    return 0;  

}  

著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

C++ 華為OJ 猴子分桃

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.