题目及代码:
// 33. 题目:海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?
1.非递归实现:
#import <Foundation/Foundation.h>
//int peach_monkey(int start,int sumEnd,int monkey){
// if (monkey==0) {
// return sumEnd;
// }
// else{
// if (sumEnd%4==0&&sumEnd!=0) {
// return peach_monkey(start,(sumEnd/4)*5+1, --monkey);
// }else{
// start+=4;
// return peach_monkey(start, start, 5);
// }
// }
//}
int main(int argc, const char * argv[]) {
@autoreleasepool {
// 33. 题目:海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?
// 第5只猴子 分之后剩下4n只桃子,分之前最少5n+1只桃子;
// 设sumEnd为分之后剩下的桃子数,sumStart为分之前的桃子数,则有等量关系:sumEnd/4=(sumStart-1)/5即sumStart=sumEnd/4*5+1;
// 因为sumEnd肯定是4的倍数,所以初始时候从4开始,每次都是+4循环
int start=4,sumEnd=4,monkey=5;
while (monkey!=0) {
if (sumEnd%4==0&&sumEnd!=0) {//因为sumEnd必须是4的倍数
sumEnd=(sumEnd/4)*5+1;
monkey--;
}else{
start+=4;
sumEnd=start;
monkey=5;
}
}
printf("原来有%d个桃子\n",sumEnd);
//
// printf("原来有%d个桃子",peach_monkey(4,4,5));
}
return 0;
}
2.递归实现:
#import <Foundation/Foundation.h>
int peach_monkey(int start,int sumEnd,int monkey){
if (monkey==0) {
return sumEnd;
}
else{
if (sumEnd%4==0&&sumEnd!=0) {
return peach_monkey(start,(sumEnd/4)*5+1, --monkey);
}else{
start+=4;
return peach_monkey(start, start, 5);
}
}
}
int main(int argc, const char * argv[]) {
@autoreleasepool {
// 33. 题目:海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?
// 第5只猴子 分之后剩下4n只桃子,分之前最少5n+1只桃子;
// 设sumEnd为分之后剩下的桃子数,sumStart为分之前的桃子数,则有等量关系:sumEnd/4=(sumStart-1)/5即sumStart=sumEnd/4*5+1;
// 因为sumEnd肯定是4的倍数,所以初始时候从4开始,每次都是+4循环
// int start=4,sumEnd=4,monkey=5;
// while (monkey!=0) {
// if (sumEnd%4==0&&sumEnd!=0) {//因为sumEnd必须是4的倍数
// sumEnd=(sumEnd/4)*5+1;
// monkey--;
// }else{
// start+=4;
// sumEnd=start;
// monkey=5;
// }
// }
// printf("原来有%d个桃子\n",sumEnd);
//
printf("原来有%d个桃子",peach_monkey(4,4,5));
}
return 0;
}