admin 管理员组

文章数量: 1184232

小熊分苹果问题

问题:有N个小熊,有一堆苹果。第一个小熊先扔掉一个苹果后,恰好能分成N份,它取走一份;第二个小熊扔掉剩余苹果中的一个后,恰好能将剩余的分成N份,它取走其中一份。如此进行到最后一个小熊,它也扔掉剩余苹果中的一个后,恰好能将剩余的分成N份,它取走其中一份(至少为1个)。问最初至少有多少个苹果。

#include <iostream>
#include <math.h>
#include <time.h>int bearNum;bool isValid(int appleNum)
{int remainApple = appleNum;for (int  iterBear = bearNum; iterBear > 0; iterBear--){if ((remainApple - 1) % bearNum == 0){remainApple = (remainApple - 1) / bearNum * (bearNum - 1);}else{return false;}}return true;
}int main()
{clock_t start, finish;std::cout << "输入熊的个数2--9:";std::cin >> bearNum;int iter  = bearNum - 1;if (bearNum > 3){iter = int(pow(bearNum, bearNum - 2)) + 1;}int appleNum = 0, remainApple;start = clock();int remain = 0;
label:while (1){appleNum = iter * bearNum + 1;remainApple = appleNum;for (int iterBear = bearNum; iterBear > 0; iterBear--){remain = (remainApple - 1) % bearNum;if (remain == 0){remainApple = (remainApple - 1) / bearNum * (bearNum - 1);}else{iter += remain; //这里可以优化goto label;}}break;}finish = clock();std::cout << "iter: " << iter - 2 << "\n" <<"Apple number: " << appleNum << std::endl;std::cout << "Time elapse: " << (double(finish - start)) / CLOCKS_PER_SEC << std::endl;remainApple = appleNum;for (int iterBear = bearNum; iterBear > 0; iterBear--){std::cout << "before seperate: " << remainApple << "\t";remain = (remainApple - 1) % bearNum;if (remain == 0){remainApple = (remainApple - 1) / bearNum * (bearNum - 1);}std::cout << "after seperate: " << remainApple << std::endl;}
}

Java

package ShareApple;public class ShareApple {public int share(int bearNum){if(bearNum < 1){return 0;}else if(bearNum == 1){return 1;}int testNum = 1;int appleNum;int i = 0;while(true){appleNum = testNum;for (i = 0; i < bearNum; ++i) {if(appleNum % (bearNum - 1) == 0)appleNum = appleNum / (bearNum - 1) * bearNum + 1;elsebreak;}if(i == bearNum){break;}++testNum;}return appleNum;}public static void main(String[] args){long start = System.currentTimeMillis();ShareApple shareApple = new ShareApple();System.out.println(shareApple.share(1));System.out.println(System.currentTimeMillis() - start);}
}

本文标签: 小熊分苹果问题