package com.javaeye.aspnetdb;
/**
*
* @author aspentdb
* @url www.aspnetdb.iteye.com
* 问题描述:
* 有1000瓶汽水,每喝完一并得到一个空瓶子,每3个空瓶子可以换1瓶汽水,
* 喝掉以后又得到一个空瓶子,问总共能喝多少瓶汽水,最后还剩余多少个空瓶子。
*
*/
public class Drinks {
public static void main(String[] args) {
new Drinks().Method1(1000, 3);
new Drinks().Method2(1000, 4);
}
/**
*
* @param iTotalNum 初始汽水的数量
* @param iRoleNum 空瓶子换汽水的规则
*
* 此种方法是一边喝一边换
*/
public void Method1(int iTotalNum, int iRoleNum) {
if(iRoleNum <= 0)
{
System.out.println("规则错误!");
return;
}
int drinknum = 0; //喝掉汽水的数量
int emptyNum = 0; //空瓶子的数量
while(iTotalNum > 0) {
iTotalNum --;
drinknum ++;
emptyNum ++;
if(emptyNum % iRoleNum == 0)
{
iTotalNum ++;
emptyNum -= 3 ;
}
}
System.out.println("一共喝掉" + drinknum + ";还是" + emptyNum + ";个空瓶子");
}
/**
*
* @param iTotalNum 初始汽水的数量
* @param iRoleNum 空瓶子换汽水的规则
*
* 喝完所有汽水,再一起换汽水
*/
public void Method2(int iTotalNum, int iRoleNum) {
if(iRoleNum <= 0)
{
System.out.println("规则错误!");
return;
}
int drinknum = 0; //喝掉汽水的数量
int emptyNum = 0; //空瓶子的数量
while(iTotalNum > 0) {
drinknum += iTotalNum; //喝掉所有汽水
emptyNum += iTotalNum; //汽水变成空瓶子
iTotalNum = emptyNum/iRoleNum; //空瓶子换新汽水
emptyNum -= iTotalNum*3; //换掉当前的空瓶子
}
System.out.println("一共喝掉" + drinknum + ";还是" + emptyNum + ";个空瓶子");
}
}
问题来源和代码实现参考《Java编程那些事儿》