[Java] 纯文本查看 复制代码
public static void main(String[] args) {
int count = 28;//一共28瓶可乐
int kele = 0; //从0开始购买
int pinggai = 0;//瓶盖数量
for (int i = 1; kele <= count; i++) {
kele++;//每买一次,可乐多一瓶 i=购买次数
pinggai++;//瓶盖多一个
if (pinggai / 3 == 1) { //当累计的瓶盖达到3个可以兑换一瓶,
kele++; //这个时候可乐数量+1,
pinggai -= 2; //瓶盖数量-2,,因为多了瓶可乐就多了个瓶盖 -3再+1
}
if (kele == 28) { //可乐慢28,打印出买了多少瓶可乐 i
System.out.println("一共买了" + i + "瓶可乐");
}
}
}
[Java] 纯文本查看 复制代码
public static void main(String[] args) {
int persons = 28;
buyCoke(persons);
}
/**
* 通过人数判断买多少瓶可乐刚刚好
* @param persons 需要可乐的人数
*/
public static void buyCoke(int persons) {
int buy = 0;
int pinggai = 0;
for (int i = 1; i <= persons; i++) {
buy++;
pinggai++;
// 当一次性买多少瓶的 + 瓶盖可置换的可乐 = 需求人数 程序终止
if ((buy + exchange(pinggai)) == persons) {
System.out.println(persons + "人每人一瓶可乐,一共需要买" + buy + "瓶");
return;
}
}
}
/**
* 通过瓶盖的数量确认可以换多少瓶可乐
* @param pinggai 瓶盖数量
* @return 可置换可乐数量
*/
public static int exchange(int pinggai) {
// 0.1.2个瓶盖换不了可乐
if (pinggai == 0 || pinggai == 1 || pinggai == 2) {
return 0;
} else {
int Coke = pinggai / 3;// 3瓶盖 可以兑换 1可乐+1瓶盖,
int left = pinggai % 3;// 这是置换可乐后剩余的瓶盖
return Coke + exchange(Coke + left);// 返回置换的可乐数量
// ↑将剩余的瓶盖 和 置换可乐后产生的瓶盖 再用于置换可乐,当瓶盖不足以换可乐 就O了
}
}