泪目!!!终于是自己完完整整写出的代码了,不翻资料也没看参考代码
(之前的要么和老师练习,要么找教材东拼西凑)
方法2:数学角度看bottle价值0.5 元,20元最多可换40bottle,由于喝到最后会剩一个bottle,故bottle=40-1=2*money-1。而soda=bottle,所以soda=2*money-1。
int main()
{int money = 0;int soda = 0;printf("input:");scanf("%d" ,&money);if (money < 0){printf("soda=0\n");}else{printf("soda=%d\n", 2 * money - 1);}return 0;
}
方法1:思路如图所示:(还要考虑第三次循环和最后一个剩下的空瓶组成的汽水)
问题:
1.忘记让soda+soda1
2.缺少余数多出来的空瓶
int main()
{int money = 0;int soda = 0;int soda1 = 0;int bottle = 0;for ( money = 1; money <= 20; money++){soda++;bottle++;}while (soda1 = bottle / 2){bottle = soda1 + bottle % 2;soda += soda1;}printf("%d\n", soda);return 0;
}
这是第二版,又又又漏掉了5/2多出来的一瓶bottle+最后一瓶bottle=soda
int main()
{int money = 0;int soda = 0;int soda1 = 0;int bottle = 0;for ( money = 1; money <= 20; money++){soda++;bottle++;}while (soda1 = bottle / 2){bottle = soda1;soda += soda1;}printf("%d\n", soda);return 0;
}
下面是第一版,代码是错的,把20空瓶想成了10空瓶,也没有考虑到空瓶能继续转换成汽水的情况
int main()
{int money = 0;int soda = 0;int soda1 = 0;int bottle = 0;//money=soda;//soda=2*bottle;for ( money = 1; money <= 20; money++){soda++;if (soda % 2 == 0){bottle++;}if (bottle != 0 && bottle % 2 == 0){soda1++;bottle = 0;}}printf("%d\n", soda+soda1);return 0;
}