五只猴子一起摘了一堆桃子,因为太累了,它们商量决定,先睡一觉再分.一会其中的一只猴子来了,它见别的猴子没来,便将这堆桃子平均分成5份,结果多了一个,就将多的这个吃了,并拿走其中的一份.一会儿,第2只猴子来了,他不知道已经有一个同伴来过,还以为自己是第一个到的呢,于是将地上的桃子堆起来,再一次平均分成5份,发现也多了一个,同样吃了这1个,并拿走其中一份.接着来的第3,第4,第5只猴子都是这样做的.......,根据上面的条件,问这5只猴子至少摘了多少个桃子?第5只猴子走后还剩下多少个桃子?
#include<stdio.h>
int main() {
int t;//t为最后剩下的桃子数
for(t = 4;; t = t + 4) { //最后剩下的桃子数一定为4的倍数
int s;
s = t;
int i;//i为循环变量
for(i = 1; i <= 4; i++) {
int s1;//s和s1用于计算第五只到第二只猴子看到的桃子数
s1 = s * 5 / 4 + 1;
if(s1 % 4 != 0)break; //第五只到第二只猴子看到的桃子数一定为4的倍数
s = s1;
}
if(i > 4) {
printf("%d %d", s * 5 / 4 + 1, t); //第一只猴子看到的桃子数不需要是4的倍数。t为剩下的桃子数,s为第二只猴子看到的桃子数,那么s*5/4+1为第一只猴子看到的桃子数。
break;
}
}
return 0;
}
#include <iostream>
using namespace std;
int main(void)
{
int s[6]={0};
int i;
for (s[5]=1;;s[5]++)
{
s[4]=5*s[5]+1; //可以肯定的是 第一次的桃子桃 x%5==1
if( (s[4]%4) !=0 )
continue;
else
s[4] /= 4; //想知道这代码有什么用
s[3]=5*s[4]+1;
if( (s[3]%4) !=0 )
continue;
else
s[3] /= 4;
s[2]=5*s[3]+1;
if( (s[2]%4) !=0 )
continue;
else
s[2] /= 4;
s[1]=5*s[2]+1;
if( (s[1]%4) !=0 )
continue;
else
s[1] /= 4;
s[0]=5*s[1]+1;
break;
}
cout<<"剩余桃子有"<< s[5]*4 << "个" << ",一共有" << s[0] << "个桃子." << endl;
return 0;
}
运行结果:
是没有编程思路,还是,有了编程思路,不会写代码啊?