设总共N个人
因为最后苹果是刚好都拿完,所以第N个人拿了N个苹果,则第N-1个人拿了N-1个+剩下苹果的1/8,因为每个人拿的苹果一样多,所以第N-1个人拿了N个苹果,剩下的为N给最后一个人拿,所以第N-1个人没拿之前应该有2N个苹果,于是得出:(N-1+(2N-N+1)/8)=N,所以N=7。
程序如下:
var x,b,n,y:integer
begin
n:=7 {总共人数为7人}
y:=n {保留7人}
b:=0{第7人拿了苹果后剩下b个,b为0,从后往前推}
while n>=1 do {后退到第1人得出结果}
begin
x:=(8*b+7*n) div 7 {假设最后一个人没拿之前还剩x个苹果
{根据:x-(n+(x-n)/8)=b,算出x}
b:=x{b为所剩苹果数,x赋给b,即为第n-1次所剩苹果}
dec(n)
end
writeln('The apple is:',x)
writeln('The people is:',y)
readln
end.
已经编译通过
/********************************************************此题可以使用逆向思维,分析如下:
*假设最后一个人取了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<4i++)
{
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)
for(i=0i<5i++)
{
allNum = (allNum-boyNum)/5
printf(" %u",allNum)
allNum = allNum*4
}
printf("\n")
i=0
j++
}
}
//方案二:正常思维
#include<stdio.h>
void main()
{
const int boyNum=1//最后剩下的留给小孩的那个苹果
unsigned int allNum = 1//苹果总数,预设为6
unsigned int num,m
int i=0,j=0
while(allNum <(1<<15))//在allNum没有溢出前的所有答案
{
num = allNum
i=0
for(i<5i++)
{
m = (num-boyNum)%5
if(m != 0)
{
i=0
break
}
num = (num-boyNum)/5
/* if(num == 0)//可以不需要,因为这种情况很少,而且会被if(m != 0) 排除掉,在此影响效率
{
i=0
break
}*/
num = num*4
}
if(i>=4)
{
j++
printf("第%d组答案:",j)
printf("%u",allNum)
num = allNum
for(i=0i<5i++)
{
num = (num-boyNum)/5
printf(" %u",num)
num = num*4
}
printf("\n")
}
allNum++
}
}
1 可能存在下载问题。2 可能是因为芸豆分苹果应用在某些地区或设备上不可用,或者应用程序可能存在错误或故障。
3 建议尝试使用其他设备或在应用商店搜索其他类似的应用程序来解决问题。
如果问题持续存在,可以联系应用程序的技术支持或开发者获取帮助。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)