c语言编程问题,查查我哪里错了?

题目:
猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,有多吃了一个。第二天又将剩下的桃子吃掉一半,又多吃了一个。以后每天都吃了前一天剩下的一半另一零一个。到第十天想再吃,见只剩下一个桃子了。求第一天共摘了多少桃子?

疑问:答案是1543.但是我这么做却做不出来,怎么解?哪里错了?怎么改?

你好!!

对照你自己的程序看看吧,你发的图片,不好改

 
 #include <stdio.h>
 int main()
{
long int i=1,k;   //i为桃子数,k为天数
    long int  j;
for(;;i++)
    {j=i;
    if(j%2==0)
    {
   for(k=1;k<10;k++)
          {   j=j/2-1;  
          }
       if(j==1)  //判断最后一天的桃子数是否为一个。
        break;
    }
 } 
     
 printf("第一天共摘桃子:%d\n",i);   
}

追问

你好 ,你的 编程软件能发给我么? 能的话给我发到9 5 3 0 1 5 2 7 爱 他 q q点c o m

追答

满意请采纳,我会发给你的
再发离线文件,有问题告诉我

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-11-12
以你的思路:
int flag;
for(n=4;n<2000;n++){
t=n;
flag=0;
for(d=1;d<10;d++){
if(t%2==1){//每天的一半必须是整数
flag=1;
break;
}
t=(t/2)-1;//这里要用t做循环,否则n的值被改掉影响了整个for循环
}
if(t==1&&flag==0)
printf("%d\n",n);//改成打印n
}
第2个回答  2013-11-12
你的算法好像不太正确吧, 正确的思路是从第十天开始逆推。
比如设第十天的桃子数为X, 第九天的桃子数为Y, 则X = Y/2 - 1,
则Y= 2(X + 1),以此类推,这样依次循环即可得到第一天的桃子数。你按这个思路写代码,有问题可追问。追问

我正推的

追答

正推的话可以使用递归来完成,

int getpeach(int x)
{
    if(1 == x)
    {
        return 1;
    }
    else
    {
        return 2 * (getpeach(x-1) + 1);
    }

int main()
{
    printf("%d\r\n", getpeach(10));
}

第3个回答  2013-11-12
首先你的printf要写到循环语句下面啊 你开始就输出肯定错的啊 , 而且printf没有参数,输出什么呢?
相似回答