此題今年我在包括360在內的三家公司的筆試面試中遇到過,總結了此題的兩種問法及巧妙解決方案,方便大家應對招聘或者當個智力題開動下思維也好。
public class SanHuanYi {
/**
* @param args
*/
public static void main(String[] args) {
int init_bottle_num = 30;//初始汽水的數量
int person_num = 0;//能供給同學的數量
person_num = getAllBottleNum(init_bottle_num);
System.out.println(person_num);
}
static int getAllBottleNum(int bottle_num){
if(bottle_num <= 0)
return 0;
int all_num = bottle_num;//all_num最終數量
while(bottle_num >= 3){
int temp = bottle_num / 3;
all_num += temp;
bottle_num = temp + bottle_num % 3;
}
all_num += bottle_num == 2 ? 1: 0;//剩兩瓶總數量就加1
return all_num;
}
}
public class SanHuanYi {
/**
* @param args
*/
public static void main(String[] args) {
int person_num = 30;//需要供給的人數
int all_bottle_num = getLeastBottle(person_num);
System.out.println(all_bottle_num);
}
static int getLeastBottle(int person_num){
if(person_num <= 0)
return 0;
if(person_num > 0 && person_num < 3)
return person_num;
int sum = 0;
int group_num = person_num / 3;//能夠分的組數
int yushu = person_num % 3;//分組完,剩餘的人
sum = 3 + (group_num-1) * 2;
if(yushu == 0){
sum--;
}else if(yushu == 1){
}else{
sum++;
}
return sum;
}
}
好了,我們現在回頭看看問法一的巧妙解法:買了30瓶汽水,先可以供給30名同學,剩了30個空瓶子,我們還是利用那個“思想”,找15個同學每人分兩個空瓶子,讓他們自己去找老闆,那麼他們都能喝到汽水,所以直接用30+15 = 45就完了!
==================================================================================================
作者:nash_ 歡迎轉載,與人分享是進步的源泉!
轉載請保留原文地址:http://blog.csdn.net/nash_/article/details/8235632
===================================================================================================