新手求助!

白衣少年。 2017-09-19 09:35:28
题目:海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子平均分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了 一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?

#include<stdio.h>
void main()
{
int sum, i;
for (sum = 0; sum < 10000; sum++) /*sum用来遍历各数寻找符合条件的最小整数*/
{
for (i = 0; i < 5; i++) /*执行5次循环判断sum是否符合条件*/
{
if (sum % 5 == 1) /*如果桃子的数量平均分成5分且剩下1个就执行*/
sum = sum - (sum / 5) - 1; /*猴子取走一份且扔掉一个后剩下的桃子数*/
else /*不符合第一个条件就结束该层的循环*/
break;
}
if (i == 5) /*当循环完5次就表示该数sum符合条件,从而输出*/
printf("最小的数目是:%d\n", sum);
break; /*输出最小数后就中止该循环,不再遍历各数*/
}
}


无论遍历各数的范围多大,都没有数值输出……新手一枚,大神我的这个思路有问题吗
...全文
229 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
白衣少年。 2017-09-21
  • 打赏
  • 举报
回复
还有就是i==5时的break..我是复制了前次没修改过的代码,修改了的就没有这个错误了
白衣少年。 2017-09-21
  • 打赏
  • 举报
回复
啊哈谢谢各位大神,知道怎么解决了!对,就是sum应该赋予另外一个值,因为它会变!
赵4老师 2017-09-21
  • 打赏
  • 举报
回复
百度搜“倒推法”
酱油党 2017-09-20
  • 打赏
  • 举报
回复
引用 2 楼 cfjtaishan 的回复:
#include<stdio.h>
int main()
{
    int sum, i, peachs;
    for (peachs = 0; peachs < 10000; peachs++)
    {
        sum = peachs;
        for (i = 0; i < 5; i++)
        {
            if (sum % 5 == 1)
                sum = sum - (sum / 5) - 1;
            else
                break;
        }
        if (i == 5) {   /*加上大括号*/
            printf("最小的数目是:%d\n", sum);
            break;
        }
    }

    return 0;
}
参考一下吧。 当算出最小数目的桃子时就要break出去,所以当i == 5时才要break;所以这个也是为什么一直没有输出,因为当sum == 0时,就break出外循环了。
正解!~
倚栏|听风 2017-09-20
  • 打赏
  • 举报
回复
我好像看错了呀~~ 好尴尬~
自信男孩 2017-09-20
  • 打赏
  • 举报
回复
#include<stdio.h>
int main()
{
    int sum, i, peachs;
    for (peachs = 0; peachs < 10000; peachs++)
    {
        sum = peachs;
        for (i = 0; i < 5; i++)
        {
            if (sum % 5 == 1)
                sum = sum - (sum / 5) - 1;
            else
                break;
        }
        if (i == 5) {   /*加上大括号*/
            printf("最小的数目是:%d\n", sum);
            break;
        }
    }

    return 0;
}
参考一下吧。 当算出最小数目的桃子时就要break出去,所以当i == 5时才要break;所以这个也是为什么一直没有输出,因为当sum == 0时,就break出外循环了。
倚栏|听风 2017-09-20
  • 打赏
  • 举报
回复
算法是对的 里面的变量sum出了问题, sum作为循环条件,你每一次都在循环里面改变了sum的值 你可以跟踪一下sum变量, 看看它值的变化, sum肯定不是从1一直往上加的 解决办法: sum 作为循环变量 不要改变它 只用sum++操作,另外定义一个变量进行判断 如果解决了问题,还请给点分
qq_29846883 2017-09-20
  • 打赏
  • 举报
回复
应该逆向思考吧

	int sum = 1;
	for (int i = 0; i < 5; i++)
	{
		sum = (sum * 5 + 1);
	}

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧