package 递归;
专注于为中小企业提供成都做网站、网站制作服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业申扎免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了上千余家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。
import java.util.Scanner;
public class 汽水 {
public static void main(String[] args) {
Scanner scan=new Scanner(System.in);
System.out.println("请输入您购买汽水所花的钱");
int money=scan.nextInt();
System.out.println("20元一共能喝"+cal(money,money,money)+"瓶");
}
/**
*
* @param sum 总瓶数
* @param cap 瓶盖数
* @param bottle 瓶子数
* @return
*/
public static int cal(int sum,int cap,int bottle){
int add=cap/3+bottle/2;//每次循环所增加的汽水
sum=sum+add;
System.out.println(sum);
cap=cap%3+add;//每次循环后的瓶盖子
System.out.println(cap);
bottle=bottle%2+add;//每次循环后的瓶子
System.out.println(bottle);
System.out.println("-----------------");
if(cap3bottle2){//递归结束的条件
return sum;
}else{
return cal(sum,cap,bottle);//递归调用
}
}
}
20元一共能喝113瓶
正确的结果:对兑了17次,共换了93个瓶子,第18次对兑时余下1个空瓶,2个瓶盖。
递归模型楼上“lzs丶灬 ”同志是正确的,但存在逻辑错误。我帮他修正如下:
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);
}
下附代码,可以在键盘输入加入判断,比如是否输入的是数字而不是字母等等,是否输入的是正数而不是其他符号... 另外可以将下面代码优化,封装,在main方法只做调用即可
package test;
import java.util.Scanner;
public class test {
public static void main(String[] args) {
boolean flag = true;
while(flag){
System.out.println("欢迎使用自动饮料售卖机");
System.out.println("1.雪碧 3.00");
System.out.println("2.可乐 3.00");
System.out.println("3.特仑苏 5.00");
System.out.println("4.农夫山泉 2.00");
@SuppressWarnings("resource")
Scanner input = new Scanner(System.in);
System.out.print("请输入你的选择是:");
int choise = input.nextInt();
System.out.print("请投币:");
int money = input.nextInt();
money(money, choise);
System.out.print("是否继续'1.继续 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("请再投入"+(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("请再投入"+(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("请再投入"+(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("请再投入"+(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("无限换");}
else
{
while((newBott+left)=M) //如果还能换
{
int temp1 = (newBott+left)%M; //换了之后剩下不够换的
int temp2 = (newBott+left)/M; //换出来新的
left = temp1;
newBott = temp2;
sum = sum + newBott + left; //总数增加
}
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;}
}
}
//--------------------------------------------------------------------------------
售后响应及时
7×24小时客服热线数据备份
更安全、更高效、更稳定价格公道精准
项目经理精准报价不弄虚作假合作无风险
重合同讲信誉,无效全额退款