题目大概是,某人刚开始有5个朋友,他的朋友数量以下面方式增长:第1周少1个朋友,剩下的朋友数量翻倍;第二周少2个朋友,剩下的朋友数量翻倍.......第N周少N个朋友,剩下的朋友数量翻倍。
编写一个程序显示这个人每周朋友的数量,直到朋友数量<=150.
这是我写的
#include
int main(void)
{
int fr[200], i=0;
while (fr[i] < 150) {
fr[0] = 5;
fr[i] = (fr[i] - i + 1) * 2;
i++;
}
for (i = 0; fr[i] <150; i++)
printf("at %dd week there are %3d friends\n", i, fr[150]);
getchar();
return 0;
}
然后调试
就是这样,谢谢
(我在想能否用数组的方式实现)
#include
#include
int main(void)
{
int f = 5;
int i = 1;
while (1)
{
f = (f - i) * 2;
if (f >= 150)
break;
printf("%d ,%d\n", i, f);
i++;
}
system("pause");
return 0;
}
#include <stdio.h>
int main()
{
int f=5;
int i=1;
while(f<=150){
f-=1;
f*=2;
if(f<=150)
printf("第d%d朋友数量朋友数量朋友数量%d\n",i,f);
i++;
}
return 0;
}
#include \<iostream\>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
int main()
{
int n=5;
for(int i=1;;i++)
{
n -= i;
n *= 2;
if(n>150)break;
cout<<"第"<<i<<"周朋友数为:"<<n<<endl;
}
return 0;
}
先说说你的程序。
首先,如果你一定想用数组的话,需要把输出语句printf中的fr[150]改成fr[i]否则的话你后一个数字永远都是fr[150]的数据,也就是第150周的朋友数目。
其次,while语句有些问题,当前判断条件是fr[i] < 150,但是此时的fr[i]是还没赋值的新的单位,所以这个判断一点用处都没有。建议把fr[0]的赋值放到外面,这样while语句判断的时候会判断此时是否超过了150,没超过的话进行下一天的朋友数计算。
最后,i++要在朋友数目运算之前。因为你判断当第i周朋友数不足150,将计算i+1周的朋友数。而且语句应该是fr[i] = (fr[i] - i) * 2;第i周会少i个朋友,剩下的朋友数量翻倍。
#include
int main(void)
{
int fr[200], i=0;
fr[0] = 5;
while (fr[i] < 150) {
fr[i] = (fr[i] - i) * 2;
i++;
}
for (i = 0; fr[i] <150; i++)
printf("at %dd week there are %3d friends\n", i, fr[i]);
getchar();
return 0;
}
另外,其他人的回答中代码很优秀,你可以参考一下,不用数组占据大量空间,直接用单个数字在存储当前的朋友数目,计算出来后直接输出,之后这个数据就被修改继续下一轮的运算。