这题分苹果的题目请大家帮帮忙

来源:百度知道 编辑:UC知道 时间:2024/05/16 08:29:01
有苹果若干,按以下方法分给五个大人和一位小孩.
先由第一人将苹果均分为5堆,多余的一个给小孩,自己取其中的一堆.第二人
又将剩下的苹果均分为5堆,多余一个给小孩,自己取其中的一堆.第三、四、五人
同样均分,多余一个给小孩,每人各取其中一堆。问原先最少有多少苹果?五个
大人各得多少苹果?
设第i次均分前有Yi个苹果,均分后某人取走Xi个,剩下Yi+1个,则有以下
递推式:
Xi+1=(Yi-1)/5
Yi+1=4Xi+1 i=0,1,2,....5

Input



Output

原先最少有几个苹果数目(空三格)第一人得苹果数(空三格)第二人得苹果数(空三格)第三人得苹果数(空三格)第四人得苹果数(空三格)第五人得苹果数(并换行回车)

Sample Input


Sample Output

6246 1249 999 799 639 511
(该解只是一个可能解)

/*******************************************************
*此题可以使用逆向思维,分析如下:
*假设最后一个人取了num个苹果(也就是第5个人取的苹果数)
*那么第5个人取的时候还剩下(num*5+1)个苹果
*由此,可推出第4个人取的苹果数为(num*5+1)/4
*那么第4个人取的时候还剩下((num*5+1)/4)*5+1个苹果
*由此类推,可得最后答案,请看如下实现的程序
******************************************************/
#include<stdio.h>
void main()
{
const int boyNum=1;//最后剩下的留给小孩的那个苹果
unsigned int m=1;
unsigned int num;
unsigned int allNum;//苹果总数
int i=0,j=0;
while(m < (1<<15))//考虑allNum溢出的问题,不适合较大的数
{
while(i<4)
{
num = m;
for(;i<4;i++)
{
allNum = num*5+boyNum;
if((allNum%4) != 0)
{
i=0;//重新开始循环
break;

}
num = allNum>>2;//即除以4
}
m++;
}
allNum = num*5+boyNum;
printf("第%d组答案:",j+1);
printf("%u",allNum