解题思路:
1、通过while循环来模拟兑换的过程
2、用sum变量记录总共可兑换的瓶数
3、一次循环就是进行一轮兑换
4、本轮可进行兑换的空瓶子数n 除以3,就是本轮兑换到的瓶数,并加给n和sum
5、再计算本轮没兑换的空瓶子数 num%3
6、将没兑换的空瓶子数 加到 本轮兑换的瓶子数(得到下一轮的瓶子数)
7、这样一直兑换到最终瓶子数少于3个,退出循环
8、如果最终的瓶子数等于2个,就可以借1,再兑换一次汽水
注意事项:
重点理解:
在每一轮进行兑换的时候,用代码表示的先后顺序,还有方便计算的num变量,每个变量的含义
int num = n;//用于每一轮兑换后剩余的空瓶数量 int sum = 0;//换的汽水瓶数 while(1) { if(num == 1||num == 2)//最终剩下的空瓶子数少于三个,退出兑换 { break; } n = n / 3;//这一轮兑换的瓶数 sum += n;//这一轮兑换的瓶数累加 n += num % 3;//这一轮没兑换的空瓶数 累加到 这一轮的兑换的瓶数上 相当于 本轮下来剩余的空瓶子数 num = n;//记录本轮剩下的空瓶子数,便于下一轮计算 }
参考代码:
#include<stdio.h> void test72(int n) { int num = n;//用于每一轮兑换后剩余的空瓶数量 int sum = 0;//换的汽水瓶数 while(1) { if(num == 1||num == 2)//最终剩下的空瓶子数少于三个,退出兑换 { break; } n = n / 3;//这一轮兑换的瓶数 sum += n;//这一轮兑换的瓶数累加 n += num % 3;//这一轮没兑换的空瓶数 累加到 这一轮的兑换的瓶数上 相当于 本轮下来剩余的空瓶子数 num = n;//记录本轮剩下的空瓶子数,便于下一轮计算 } if(num ==2)//剩下的瓶数等于二瓶,就借用一瓶 { sum += 1;//可再兑换一次 } printf("%d\n", sum); } void test73() { while (1) { int n = 0; scanf("%d", &n); if (n == 0) { break; } test72(n); } } int main() { test73(); return 0; }
0.0分
1 人评分
C语言程序设计教程(第三版)课后习题5.4 (C语言代码)浏览:552 |
WU-格式化数据输出 (C++代码)浏览:1312 |
C语言程序设计教程(第三版)课后习题6.3 (C++代码)浏览:1067 |
A+B for Input-Output Practice (IV) (C语言代码)浏览:513 |
C语言程序设计教程(第三版)课后习题10.5 (C语言代码)浏览:612 |
2006年春浙江省计算机等级考试二级C 编程题(2) (C语言代码)浏览:383 |
简单的a+b (C语言代码)浏览:683 |
简单的a+b (C语言代码)浏览:542 |
矩阵的对角线之和 (C语言代码)浏览:1401 |
小O的乘积 (C++代码)浏览:545 |