5个水手分椰子的问题
麻烦给一个详细的C编程思路,和源代码。谢谢!
赚小钱 发表于 2020-6-15 12:16
1. 均分五份,藏一个,给猴子一个,等价于 count % 5 == 1; count = count / 5 - 1;
2. 最后均分五份 ...
之前审题有一些错误,原题说分成五份,藏掉一份,之前看成了一个。
修改部分的代码
int steal_peach(int input, int sailor_count) {
for (int i = 0; i < sailor_count; i++) {
int happiness = monkey_happy(input);
if (happiness != 0) {
return 0;
}
input = input / 5 * 4;
if (input <= 0) {
return 0;
}
}
return input;
}
void steal() {
int sailor_count = 5;
for (int input = 6;; input++) {
int result = steal_peach(input, sailor_count);
if (result > 5 && result % 5 == 1) {
printf("at least %d peaches!\n", input);
return;
}
}
} 本帖最后由 赚小钱 于 2020-6-17 10:48 编辑
本答案审题有误,在楼下有修改。这个回答就不改了。
int monkey_happy(int input) {
return (input % 5) - 1;
}
int steal_peach(int input, int sailor_count) {
for (int i = 0; i < sailor_count; i++) {
int happiness = monkey_happy(input);
if (happiness != 0) {
return 0;
}
input = input / 5 - 1;
if (input <= 0) {
return 0;
}
}
return input;
}
void steal() {
int sailor_count = 5;
for (int input = 6;; input++) {
int result = steal_peach(input, sailor_count);
if (result == 6) {
printf("at least %d peaches!\n", input);
return;
}
}
}
1. 均分五份,藏一个,给猴子一个,等价于 count % 5 == 1; count = count / 5 - 1;
2. 最后均分五份多一个,并且要求最少(也只能要求最少),可以得出,原有6个。
3. 然后就是爆破。
本帖最后由 405794672 于 2020-6-18 08:53 编辑
#include<stdio.h>
#if(0)
?
#endif
void main()
{
int i,k,n;
for (i = 4; i < 10000;i+=4)
{
n = i;
for(k=0;k<5;k++)
{ n = n / 4 * 5 + 1;
}
if (k == 5)
{
printf("原来最少有%d个桃子。\n", n);
}
}
}
#include<stdio.h>
int main()
{
int i;
int count=1; //题目要求为最少,可以采取逆向思维,即最后水手各分1个椰子
for(i = 1; i <= 6; i++) //循环6次,因为总共分了6次
{
count = count * 5 + 1; // 计算从第六次到第一次每次分后椰子的数量
}
printf("%d",count); //输出其值
return 0;
} 本帖最后由 lwy2xxj 于 2020-6-17 11:06 编辑
冒泡算法 15621 巴巴鲁 发表于 2020-6-16 10:32
#include
int main()
{
哥们,逆向思维没错,可你逆向错了。第一次可以count*5+1。这个算出来的是什么呢?
算出来是第六天的椰子。也就是第五天分完剩下的椰子。而第五天是一个人拿走了五分之一,扔了一个
所以第五天就是你第一次计算count之后把它加上1,再除以四,再乘以5,才能得出第五天的椰子,即第四天分完剩下的椰子。 巴巴鲁 发表于 2020-6-16 10:32
#include
int main()
{
我感觉最后一次还有水手一个都没有的可能只有一个给了猴子 赚小钱 发表于 2020-6-15 12:16
1. 均分五份,藏一个,给猴子一个,等价于 count % 5 == 1; count = count / 5 - 1;
2. 最后均分五份 ...
@二楼以下: 这个题目答案到底是多少15621的有木有 wp231957 发表于 2020-6-17 08:39
@二楼以下: 这个题目答案到底是多少15621的有木有
之前审题有误,已修正。答案是 15621。 代码太溜了 #include <stdio.h>
#include <math.h>
void main()
{
int i;
double k,x,y;
i=1;k=1.0;y=k;
while(i<=5)
{
i++;
y=(4*y-1)/5; //第一个y为第一个人藏的椰子数,往前算,如果连续5次都满足这个要求,那么就可以了
if(y!=floor(y))
{
k=k+1.0;
y=k;
i=1;
}
}
x=5*k+1;
printf("原有椰子至少有:%6.0f个\n",x);
} 405794672 发表于 2020-6-16 15:51
哥们,逆向思维没错,可你逆向错了。第一次可以count*5+1。这个算出来的是什么呢?
算出来是第六天的椰 ...
哈哈,真尴尬 405794672 发表于 2020-6-16 15:51
哥们,逆向思维没错,可你逆向错了。第一次可以count*5+1。这个算出来的是什么呢?
算出来是第六天的椰 ...
又看了一遍题,藏起来一份{:5_104:}
页:
[1]