package 遞歸;
專注于為中小企業(yè)提供成都做網(wǎng)站、網(wǎng)站制作服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)申扎免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了上千余家企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
import java.util.Scanner;
public class 汽水 {
public static void main(String[] args) {
Scanner scan=new Scanner(System.in);
System.out.println("請(qǐng)輸入您購(gòu)買汽水所花的錢");
int money=scan.nextInt();
System.out.println("20元一共能喝"+cal(money,money,money)+"瓶");
}
/**
*
* @param sum 總瓶數(shù)
* @param cap 瓶蓋數(shù)
* @param bottle 瓶子數(shù)
* @return
*/
public static int cal(int sum,int cap,int bottle){
int add=cap/3+bottle/2;//每次循環(huán)所增加的汽水
sum=sum+add;
System.out.println(sum);
cap=cap%3+add;//每次循環(huán)后的瓶蓋子
System.out.println(cap);
bottle=bottle%2+add;//每次循環(huán)后的瓶子
System.out.println(bottle);
System.out.println("-----------------");
if(cap3bottle2){//遞歸結(jié)束的條件
return sum;
}else{
return cal(sum,cap,bottle);//遞歸調(diào)用
}
}
}
20元一共能喝113瓶
正確的結(jié)果:對(duì)兌了17次,共換了93個(gè)瓶子,第18次對(duì)兌時(shí)余下1個(gè)空瓶,2個(gè)瓶蓋。
遞歸模型樓上“l(fā)zs丶灬 ”同志是正確的,但存在邏輯錯(cuò)誤。我?guī)退拚缦拢?/p>
public?static?int?test(int?sum,?int?pingzi,?int?gaizi){
if?(pingzi??2??gaizi??3)
{
return?sum;
}
int?newPingzi?=?pingzi?/?2;
int?newGaizi?=?gaizi?/?3;
sum?+=?newPingzi;
sum?+=?newGaizi;
pingzi?=?newPingzi?+?newGaizi?+?pingzi?%?2;
gaizi?=?newGaizi?+?newPingzi?+?gaizi?%?3;
return?test(sum,?pingzi,?gaizi);
}
下附代碼,可以在鍵盤(pán)輸入加入判斷,比如是否輸入的是數(shù)字而不是字母等等,是否輸入的是正數(shù)而不是其他符號(hào)... 另外可以將下面代碼優(yōu)化,封裝,在main方法只做調(diào)用即可
package test;
import java.util.Scanner;
public class test {
public static void main(String[] args) {
boolean flag = true;
while(flag){
System.out.println("歡迎使用自動(dòng)飲料售賣機(jī)");
System.out.println("1.雪碧 3.00");
System.out.println("2.可樂(lè) 3.00");
System.out.println("3.特侖蘇 5.00");
System.out.println("4.農(nóng)夫山泉 2.00");
@SuppressWarnings("resource")
Scanner input = new Scanner(System.in);
System.out.print("請(qǐng)輸入你的選擇是:");
int choise = input.nextInt();
System.out.print("請(qǐng)投幣:");
int money = input.nextInt();
money(money, choise);
System.out.print("是否繼續(xù)'1.繼續(xù) 0.退出' :");
int goon = input.nextInt();
if(goon==1){
flag = true;
}else{
flag = false;
}
}
}
public static void money(int money,int choise){
switch(choise){
case 1:
if(money-30){
System.out.println("找零"+(money-3)+"元");
}else if(money-30){
System.out.println("請(qǐng)?jiān)偻度?+(3-money)+"元");
}else if(money-3==0){
System.out.println("生活愉快");
}else{
System.out.println("輸入有誤!");
}
break ;
case 2:
if(money-30){
System.out.println("找零"+(money-3)+"元");
}else if(money-30){
System.out.println("請(qǐng)?jiān)偻度?+(3-money)+"元");
}else if(money-3==0){
System.out.println("生活愉快");
}else{
System.out.println("輸入有誤!");
}
break ;
case 3:
if(money-50){
System.out.println("找零"+(money-5)+"元");
}else if(money-50){
System.out.println("請(qǐng)?jiān)偻度?+(5-money)+"元");
}else if(money-5==0){
System.out.println("生活愉快");
}else{
System.out.println("輸入有誤!");
}
break ;
case 4:
if(money-20){
System.out.println("找零"+(money-2)+"元");
}else if(money-20){
System.out.println("請(qǐng)?jiān)偻度?+(2-money)+"元");
}else if(money-2==0){
System.out.println("生活愉快");
}else{
System.out.println("輸入有誤!");
}
break ;
}
}
}
//-------------------------------正向的算法,就是知道N和M算出P----------------------------------------
int left=0,sum=0,newBott=0;
int N=34,M=3; //要改M,N值在這里改
newBott = N;
sum =N;
if(M==1){System.out.println("無(wú)限換");}
else
{
while((newBott+left)=M) //如果還能換
{
int temp1 = (newBott+left)%M; //換了之后剩下不夠換的
int temp2 = (newBott+left)/M; //換出來(lái)新的
left = temp1;
newBott = temp2;
sum = sum + newBott + left; //總數(shù)增加
}
System.out.println("一共可換 "+sum+ " 瓶");
}
//------------------------------反向算法,就是知道P,M算出N---------------------------------------------
int left=0,sum=0,newBott=0;
int N,M=15,P=222; //要改M,P值在這里改
labelA: for(N=M;NP;N++)
{
if(M==1){N=1;System.out.println("需要 "+ N+ "瓶");break;} //如果可以1瓶換1瓶,那就只用1瓶
if(M==0){N=P;System.out.println("需要 "+ N+ "瓶");break;} //如果可以1瓶換0瓶,那就用P瓶
sum =N;
newBott = N;
while((newBott+left)M)
{
int temp1 = (newBott+left)%M;
int temp2 = (newBott+left)/M;
left = temp1;
newBott = temp2;
sum = sum + newBott + left;
if(P==sum){System.out.println("需要 "+ N+ "瓶");
break labelA;}
}
}
//--------------------------------------------------------------------------------