| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3885 人关注过本帖
标题:老话题:猴子吃桃子的题目 采用不同的循环函数为何结果不同
只看楼主 加入收藏
andre116
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2013-4-8
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:10 
老话题:猴子吃桃子的题目 采用不同的循环函数为何结果不同
题目:猴子吃桃子问题。猴子第一天摘下若干个桃,当即只一半,又多吃一个。第二天早上又将剩下的一半吃掉一半,双多吃一个。以后每天早上都吃了前天剩下的一半零一个,到第10天早上只剩下最后一个桃。问第一天摘了几个桃。

我一开始用 for循环写的代码如下:

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
void main()
{
    int i = 1;  //定义循环天数
    int y = 1; //定义剩余桃子
    int y1;   //定义前一天剩余的桃子   y= y1/2-1
    printf("\n猴子吃桃子,每天吃一半加一个,十天后仅剩一个了。问桃子总共多少?");
    for (i = 1; i <= 10; i++)
    {
        y1 = 2 * (y + 1);
        y = y1;
    }
    printf("\n桃子的总数量是 %d", y);
        system("pause");
}

得到的结果是 3070

但是我后来又改为用while循环来写,却压根不显示结果

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
void main()
{
    int i = 1;  //定义循环天数
    int y = 1; //定义剩余桃子
    int y1;   //定义前一天剩余的桃子   y= y1/2-1
    printf("\n猴子吃桃子,每天吃一半加一个,十天后仅剩一个了。问桃子总共多少?");
        
        while (i <= 10);
    {
        y1 = 2 * (y + 1);
        y = y1;
        i++;
    }
    printf("\n桃子的总数量是 %d", y);
    system("pause");
}

实在不得其解,还请各位帮忙看下到此错在哪里? 为何用while来写就没有结果输出呢

多谢!
搜索更多相关主题的帖子: include 
2015-07-22 19:06
hjx1120
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:李掌柜
等 级:贵宾
威 望:41
帖 子:1314
专家分:6927
注 册:2008-1-3
收藏
得分:5 
递归,一本算法书的代码
#include <stdio.h>
int peach(int n);
int main(void)
{
    int days;
    long sum;
   
    printf("输入天数:");
    scanf("%d",&days);
    sum = peach(days);
    printf("最初的桃子数:%ld\n",sum);
   
    return 0;
}

int peach(int n)
{
    if(n == 1)
        return 1;
    else
        return (peach(n-1)+1)*2;
}
2015-07-22 19:41
洋撒法
Rank: 1
等 级:新手上路
帖 子:1
专家分:5
注 册:2015-7-22
收藏
得分:5 
while (i <= 10);后面你加了个";"
直接成死循环了,去掉就好了
2015-07-22 19:50
luoye1994
Rank: 2
等 级:论坛游民
帖 子:57
专家分:58
注 册:2015-6-29
收藏
得分:3 
用递归的算法比较简单一点
2015-07-22 21:44
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9024
专家分:54030
注 册:2011-1-18
收藏
得分:0 
1
1+1 * 2 = 4
4+1 * 2 = 10
10+1 * 2 = 22
……
你的数学老师会告诉你公式是 3*(2的n次方)-2
你的计算机老师会告诉你编码是 3*(1u<<n)-2
2015-07-22 22:16
张小盒有态度
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2015-7-22
收藏
得分:0 
int main()
{
//第一天剩下num/2-1
//第二天剩下(num/2-1)/2-1
//第三天((num/2-1)/2-1)/2-1
    int num0=1;
    for (int i=9; i>=1; --i) {
        num0=(num0+1)*2;
    }
    printf("第一天的共摘了%d个桃子 \n",num0);
}
不知道这样写行不行呢?
2015-07-22 22:56
andre116
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2013-4-8
收藏
得分:0 
感谢楼上各位帮忙!

确实如楼上所述,多加了分号所致;同时也用递归算法也试验了遍。

哈哈哈,有收获!

相信生活!
2015-07-22 23:04
andre116
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2013-4-8
收藏
得分:0 
回复 2楼 hjx1120
我刚在机子上按照你的代码跑了下,输入天数后回车,屏幕一闪就灭了。

开头加了 #include <stdlib.h>头文件,结尾加了system("pause");
但结果还是一闪就灭了。

相信生活!
2015-07-22 23:26
andre116
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2013-4-8
收藏
得分:0 
回复 6楼 张小盒有态度
刚跑了下,是可以的,而且比我写的那个简单。

相信生活!
2015-07-22 23:35
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9024
专家分:54030
注 册:2011-1-18
收藏
得分:7 
程序代码:
#include <stdio.h>

int main( void )
{
    unsigned n = 10;
    printf( "第一天摘了%u个桃\n", 3*(1u<<(n-1))-2 );

    return 0;
}
2015-07-23 08:19
快速回复:老话题:猴子吃桃子的题目 采用不同的循环函数为何结果不同
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017386 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved