試探算法——發蘋果以及猴子喫桃問題

發蘋果問題

題目來源:《C/C++程序設計》西安電子科技大學出版社

備註:此題。。。沒有解出來。程序。。一直在執行。。。==!

題目描述

5個小孩,第一個孩子,n個蘋果的一半+1/2個蘋果;第二個,剩下蘋果的1/3+1/3個蘋果,第三個,剩下蘋果的1/4+1/4個蘋果,第四個,剩下蘋果的1/5+1/5個蘋果,第五個剩下的11個蘋果。。。問n多少?

代碼實現

#include<iostream>
using namespace std;

int main()
{
    int flag = 1;//試探標誌,1表示未找到n;
    int x;
    int n = 11;//首先試探最開始的蘋果數爲11;
    while (flag)
    {
        x = n;
        flag = 0;
        for (int k = 1; k <= 4&&flag==0; k++)
        {
            if ((n + 1) % (k + 1) == 0)
                n = n - (n + 1) /(k + 1);
            else
                flag = 1;
            if (flag == 0 && n != 11)
                flag = 1;
            n = x + 1;
        //  cout << n << endl;
        }
    }
    cout << "蘋果總數爲" << x << endl;
    system("pause");
    return 0;
}


猴子喫桃問題

題目來源:C程序設計(清華出版社,譚浩強著)

問題描述

猴子第一天喫一半+1,第二天剩下的一半+1,第三天剩下的一半+1。。。。第十天想喫時發現只剩下了一個桃子。問桃子原來總數。

代碼實現

#include<iostream>
using namespace std;

/*猴子喫桃問題 :
假設第九天剩餘n個桃子,則n-2/n-1=1;n=4;
假設第八天剩餘n個桃子,則n-2/n-1=4;....
以此類推
*/
int main()
{
    int n = 1;
    for (int i = 1; i <= 9; i++)
        n = (n + 1) * 2;
    cout << n << endl;
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章