猴子第一天摘下若干桃子,当即吃了一半,还觉不过瘾,又多吃了一个;第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天天早上都吃了前一天剩下的一半零一个。到第n(n<=20)天早上想再吃时,见只剩一个桃子了。求第一天共摘了多少桃子。
输入格式:
测试数据有多组,处理到文件尾。每组输入天数n。
输出格式:
每组输出第一天摘的桃子数(结果保证在int型范围)。
输入样例:
在这里给出一组输入。例如:
5
10
18
输出样例:
在这里给出相应的输出。例如:
46
1534
393214
int n,sum=1,i;
while(scanf("%d",&n) != EOF)//这是我认为的输入多组数据的方法
{
while(n)
{
sum=(sum+1)*2;
n--;
}
if(n==0)
{
i=sum/2-1;
printf("%d\n",i);
}
}
5
10
18
结果
46
49150
-2
以上是输入和运行结果
用这串代码可以解决输入一组数据并运行正确结果
但是输入一组数据时就不行了
46
1534
393214
参考代码:
#include <stdio.h>
int main()
{
int day,i,s; /*定义 day、i、s 3 个变董为基本整型*/
while(scanf("%d",&day) != EOF){
s = 1;
for(i=1;i<day;i++)//因为到第day天还剩一个,所以循环day次
{
s=(s+1)*2;//倒序求出每天的数量
}
printf("%d\n",s); /* 输出桃子的总数*/
}
return 0;
}
输出为:
46
1534
393214
sum只初始化了一次
你应该在每次循环开始都初始化,否则它越变越大,那能对吗
#include<stdio.h>
int main()
{
int peach=1,n,i;
scanf("%d", &n);
for(i=1; i<n; i++){
peach=(peach+1)*2; //从最后一天反向计算
}
printf("%d\n", peach);
return 0;
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!