每瓶汽水一元,两个空瓶可以置换一瓶汽水,现有N元,最多能喝多少瓶?
2015-11-02 18:43
501 查看
--------------------------------------------------------------------------------
这是一个很容易出错的题;假如有20元,一共能喝sum瓶汽水,每两个空瓶可以换一瓶汽水;第一次可以买20瓶,则sum=20,此时剩下20个空瓶;用这20十个空瓶可以换10瓶汽水,此时sum=20+10;则又有十个空瓶,可以换5瓶汽水,此时,sum=20+10+5;注意:此时5/2=2余下一个空瓶;记作count=1;此时sum=20+10+5=2;然后用这个两个空瓶又可以换一瓶,此时sum=20+10+5+2+1;当这一瓶喝完后,由于1/2=0;现在有的同学就说20元一共可以喝38瓶汽水。但你错了,之前还余了一个空瓶加上最后这个空瓶一共两个,可以再换一瓶,所以,最终结果是:sum=20+10+5+2+1+1=39瓶。另外,如果这最后两瓶喝完了再向老板借一个空瓶,然后又可以兑换一瓶,完了再将这个空瓶还给老板,此时sum=40,本程序不做此考虑。
[b]--------------------------------------------------------------------------------[/b]
[b]C语言源码为:[/b]
------------------------------------------------------------------------------------------
干货小知识:const修饰全局变量时,存储在只读区(代码段区),不能通过指针修改其值,const修饰
局部变量时,存储在栈区,可以通过指针修改其值,VS下会报出警告,一般情况下,我们不修改const修
饰的变量。
------------------------------------------------------------------------------------------
这是一个很容易出错的题;假如有20元,一共能喝sum瓶汽水,每两个空瓶可以换一瓶汽水;第一次可以买20瓶,则sum=20,此时剩下20个空瓶;用这20十个空瓶可以换10瓶汽水,此时sum=20+10;则又有十个空瓶,可以换5瓶汽水,此时,sum=20+10+5;注意:此时5/2=2余下一个空瓶;记作count=1;此时sum=20+10+5=2;然后用这个两个空瓶又可以换一瓶,此时sum=20+10+5+2+1;当这一瓶喝完后,由于1/2=0;现在有的同学就说20元一共可以喝38瓶汽水。但你错了,之前还余了一个空瓶加上最后这个空瓶一共两个,可以再换一瓶,所以,最终结果是:sum=20+10+5+2+1+1=39瓶。另外,如果这最后两瓶喝完了再向老板借一个空瓶,然后又可以兑换一瓶,完了再将这个空瓶还给老板,此时sum=40,本程序不做此考虑。
[b]--------------------------------------------------------------------------------[/b]
[b]C语言源码为:[/b]
# include <stdio.h> # include <stdlib.h> int main() { int piece = 1; int money = 0; int sum = 0; int E_bottle = 0; int left = 0, ret = 0; printf("请输入金额:"); scanf("%d",&money); sum = money / piece; E_bottle = sum; while (E_bottle) { E_bottle = E_bottle / 2; sum += E_bottle; if (E_bottle == 1) { left++; //1/2时余留一个空瓶 } } E_bottle = money / piece; while (E_bottle) { ret = E_bottle % 2; E_bottle = E_bottle / 2; if (ret == 1) { left++; //5/2是余一个空瓶 } } sum += left / 2; printf("%d元最多可以喝:%d瓶汽水\n",money,sum); system("pause"); return 0; }
------------------------------------------------------------------------------------------
干货小知识:const修饰全局变量时,存储在只读区(代码段区),不能通过指针修改其值,const修饰
局部变量时,存储在栈区,可以通过指针修改其值,VS下会报出警告,一般情况下,我们不修改const修
饰的变量。
------------------------------------------------------------------------------------------
相关文章推荐
- Lua和C语言的交互详解
- 关于C语言中参数的传值问题
- 简要对比C语言中三个用于退出进程的函数
- 深入C++中API的问题详解
- 基于C语言string函数的详解
- C语言中fchdir()函数和rewinddir()函数的使用详解
- C语言内存对齐实例详解
- 使用C语言判断英文字符大小写的方法
- c语言实现的带通配符匹配算法
- C语言实现顺序表基本操作汇总
- C语言中计算正弦的相关函数总结
- 使用C语言详解霍夫曼树数据结构
- 探讨C语言的那些小秘密之断言
- C语言实现BMP转换JPG的方法
- 深入探讨C语言中局部变量与全局变量在内存中的存放位置
- C语言查找数组里数字重复次数的方法
- C语言泛型编程实例教程
- C语言中使用lex统计文本文件字符数
- 在C语言中转换时间的基本方法介绍
- C语言进制转换代码分享