黑马程序员技术交流社区
标题:
分享第二道黑马入学考试题个人的想法~~
[打印本页]
作者:
mo﹎雲℡
时间:
2013-9-10 11:38
标题:
分享第二道黑马入学考试题个人的想法~~
题目:28人买可乐喝,3个可乐瓶盖可以换一瓶可乐,那么要买多少瓶可乐,够28人喝?假如是50人,又需要买多少瓶可乐?
思路:
买可乐喝,3个瓶盖可以换一瓶可乐。所以现在首先要想的问题是:买了多少可乐-->有多少个瓶盖-->可以换多少可乐-->剩下多少瓶盖-->还可以换多少可乐-->还有多少瓶盖。。。发现有点像递归。2.首先要创建一个买了多少瓶可乐,然后又多少个瓶盖的程序。
// 盖子数
int x = a;
// 瓶子数
int i = a;
// 当盖子数少于2的时候,就不能换可乐
while (x >2 ) {
// 可乐总个数
i = i + x / 3;
// 瓶盖剩余个数
x = x / 3 + x % 3;
}
// 瓶子总数
System.out.println("总共能获得可乐瓶数:" + i + "---剩余瓶盖数:" + x);
复制代码
3.突然发现这个方法就想是一个3进制的数。4.写出代码后发现,过于复杂,所以既然3个盖子换一瓶,一瓶带一个瓶盖,相当于2个盖子换一瓶没有盖子的,设需要买x瓶可乐,既x+x/2≥28,既x≥56/3,取整,得x=19,但是此方法存在问题。当最后剩下2个瓶盖的时候,就会出现多出一瓶可乐的情况。5.能不能通过反算来解决问题呢?现在一个可乐都没有,从0开始计算,每多3瓶就少买一瓶,然后得到总瓶数。然后瓶盖为1。
// 空瓶数
int i = 0;
// 总瓶数(需要买的)
int sum = 0;
for (int x = 0; x < a; x++) {
if (i != 3) {
i = i + 1;
sum = sum + 1;
} else if (i == 3) {
i = 1;
}
}
return sum;
复制代码
作者:
mo﹎雲℡
时间:
2013-9-10 13:12
哈哈 谢谢版主了!~~~
作者:
熊纪达
时间:
2013-9-10 15:26
如果买3瓶,相当于买4瓶,多出1个瓶盖
如果买6瓶,相当于买8瓶,多出2个瓶盖
如果买9瓶,相当于买12瓶,多出3个瓶盖
假如有x个人,需要买 (x/4*3+x%4)瓶,多出(x/4+x%4)个瓶盖
则x个人需要买(x/4*3+x%4)-(x/4+x%4)/3瓶可乐。
作者:
黄炳期
时间:
2013-9-10 21:16
有自己的想法,很棒!
作者:
山治0712
时间:
2014-1-24 22:02
这是我写的,和你比起来怎样?{:soso_e120:}
我开始没看你的思路,昨天晚上就把题目记下来了,上班有时间想想思路,回来调试了下,共勉
public class BuyDrink {
public static void main(String[] args) throws IOException {
int person = 0;
person = readKey();
// System.out.println(person);
buyDrink(person);
}
public static void buyDrink(int person) {
int temp = 0, buy = 0, free = 0;
if (person <= 3)
System.out.println("人数较少,您需要购买" + person + "瓶汽水.");
else {
for (buy = 3, temp = 3; (buy + free) < person; ) {
if (temp == 3) {
free++;
temp = 1;
}
if ((buy + free) < person) {
buy++;
temp++;
}
}
System.out.println("您需要购买" + buy + "瓶汽水,免费送您" + free + "瓶汽水,"+"还有"+temp+"个
盖子");
}
public static int readKey() throws IOException {
System.out.println("请输入人数:");
int ch;
StringBuilder sb = new StringBuilder();
BufferedInputStream is = new BufferedInputStream(System.in);
while ((ch = is.read()) != -1) {
if (ch == '\r')
continue;
if (ch == '\n')
return Integer.parseInt(sb.toString());
if (Character.isDigit((char) ch))
sb.append((char) ch);
}
return Integer.parseInt(sb.toString());
}
}
作者:
NetTravel
时间:
2014-2-19 20:35
本帖最后由 NetTravel 于 2014-2-19 20:37 编辑
用c 写的,思路:使用while循环,一直买下去,
直到满足条件coke+coke/3<count为止
#include <stdio.h>
void main()
{
//cool表示买了的可乐
int coke=0;
//count表示需要和可乐的人数
复制代码
作者:
高怀
时间:
2015-3-15 15:01
好难 不会啊 这么难
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2