以下是我编写的一个程序,意思是通过把苹果分配给若干个箱子,然后用箱子的组合满足顾客需要购买的苹果数量。总的苹果数和顾客要购买的苹果数按实际情况输入,运行的结果发现有些数是正确而有些数并不正确,显示出来错误的数我找不出什么规律,请大家帮帮忙啦,以下是程序:import java.util.Scanner;
import java.math.*;
import java.lang.*;public class apple_acount { public apple_acount() {
}
public static void main (String[] args)
{
System.out.println("把苹果分配给若干个箱子,然后用箱子的组合满足顾客需要");
int all_apples;
System.out.print("请输入你苹果的总数:");
Scanner aa=new Scanner(System.in);
all_apples=aa.nextInt();
int x=(int)(Math.log(all_apples)/Math.log(2)+1); int[] apples_divide=new int[x];
boolean j=true;
int k=all_apples;
int i=0;
if(all_apples==1)
{
apples_divide[0]=1;
}
else if(all_apples==2)
{
apples_divide[0]=1;
apples_divide[1]=1;
}
else if(all_apples==3)
{
apples_divide[0]=2;
apples_divide[1]=1;
}
else
{
while(j)
{
apples_divide[i]=(int)Math.floor(k/2);
k=(int)Math.floor(k/2)+k%2;
if(k==2)
{
apples_divide[i+1]=1;
apples_divide[i+2]=1;
j=false;
}
else if(k==3)
{
apples_divide[i+1]=2;
apples_divide[i+2]=1;
j=false;
}
i++;
}
}
System.out.println("最少要用"+(apples_divide.length)+"个箱子,分配规则如下:");
for(int s=0;s<apples_divide.length;s++)
{
System.out.println("第"+(s+1)+"箱:"+apples_divide[s]);
}
System.out.print("请输入顾客要购买的苹果数量:");
int box_input;
Scanner bi=new Scanner(System.in);
box_input=bi.nextInt();
int e=box_input;
System.out.println("需要组合的箱子是:");
int w=0;
if(box_input==1 & all_apples==1)
{
System.out.println("第1箱:1");
}
else
{
if(e<apples_divide[0])
{
while((w+2)<=apples_divide.length)
{
if(apples_divide[w]>e & e>=apples_divide[w+1])
{
if(e==apples_divide[w+1])
{
System.out.println("第"+(w+2)+"箱:"+apples_divide[w+1]);
break;
}
System.out.println("第"+(w+2)+"箱:"+apples_divide[w+1]);
e=e-apples_divide[w+1];
}
w++;
}
}
else if(e>=apples_divide[0])
{
if(e==apples_divide[0])
{
System.out.println("第1箱:"+apples_divide[0]);
}
else
{
System.out.println("第1箱:"+apples_divide[0]);
int t=box_input-apples_divide[0];
while((w+2)<=apples_divide.length)
{
if(apples_divide[w]>t & t>=apples_divide[w+1])
{
if(t==apples_divide[w+1])
{
System.out.println("第"+(w+2)+"箱:"+apples_divide[w+1]);
break;
}
System.out.println("第"+(w+2)+"箱:"+apples_divide[w+1]);
t=t-apples_divide[w+1];
}
w++;
}
}
}
}
}
}
你们运行一下试试看,谢谢啦!这是我第一次发帖
import java.math.*;
import java.lang.*;public class apple_acount { public apple_acount() {
}
public static void main (String[] args)
{
System.out.println("把苹果分配给若干个箱子,然后用箱子的组合满足顾客需要");
int all_apples;
System.out.print("请输入你苹果的总数:");
Scanner aa=new Scanner(System.in);
all_apples=aa.nextInt();
int x=(int)(Math.log(all_apples)/Math.log(2)+1); int[] apples_divide=new int[x];
boolean j=true;
int k=all_apples;
int i=0;
if(all_apples==1)
{
apples_divide[0]=1;
}
else if(all_apples==2)
{
apples_divide[0]=1;
apples_divide[1]=1;
}
else if(all_apples==3)
{
apples_divide[0]=2;
apples_divide[1]=1;
}
else
{
while(j)
{
apples_divide[i]=(int)Math.floor(k/2);
k=(int)Math.floor(k/2)+k%2;
if(k==2)
{
apples_divide[i+1]=1;
apples_divide[i+2]=1;
j=false;
}
else if(k==3)
{
apples_divide[i+1]=2;
apples_divide[i+2]=1;
j=false;
}
i++;
}
}
System.out.println("最少要用"+(apples_divide.length)+"个箱子,分配规则如下:");
for(int s=0;s<apples_divide.length;s++)
{
System.out.println("第"+(s+1)+"箱:"+apples_divide[s]);
}
System.out.print("请输入顾客要购买的苹果数量:");
int box_input;
Scanner bi=new Scanner(System.in);
box_input=bi.nextInt();
int e=box_input;
System.out.println("需要组合的箱子是:");
int w=0;
if(box_input==1 & all_apples==1)
{
System.out.println("第1箱:1");
}
else
{
if(e<apples_divide[0])
{
while((w+2)<=apples_divide.length)
{
if(apples_divide[w]>e & e>=apples_divide[w+1])
{
if(e==apples_divide[w+1])
{
System.out.println("第"+(w+2)+"箱:"+apples_divide[w+1]);
break;
}
System.out.println("第"+(w+2)+"箱:"+apples_divide[w+1]);
e=e-apples_divide[w+1];
}
w++;
}
}
else if(e>=apples_divide[0])
{
if(e==apples_divide[0])
{
System.out.println("第1箱:"+apples_divide[0]);
}
else
{
System.out.println("第1箱:"+apples_divide[0]);
int t=box_input-apples_divide[0];
while((w+2)<=apples_divide.length)
{
if(apples_divide[w]>t & t>=apples_divide[w+1])
{
if(t==apples_divide[w+1])
{
System.out.println("第"+(w+2)+"箱:"+apples_divide[w+1]);
break;
}
System.out.println("第"+(w+2)+"箱:"+apples_divide[w+1]);
t=t-apples_divide[w+1];
}
w++;
}
}
}
}
}
}
你们运行一下试试看,谢谢啦!这是我第一次发帖
我在这个程序输入苹果的总数为600,顾客购买的是123,下面是现实结果,没错啊
--------------------Configuration: <Default>--------------------
把苹果分配给若干个箱子,然后用箱子的组合满足顾客需要
请输入你苹果的总数:600
最少要用10个箱子,分配规则如下:
第1箱:300
第2箱:150
第3箱:75
第4箱:37
第5箱:19
第6箱:9
第7箱:5
第8箱:2
第9箱:2
第10箱:1
请输入顾客要购买的苹果数量:123
需要组合的箱子是:
第3箱:75
第4箱:37
第6箱:9
第8箱:2Process completed.
把苹果分配给若干个箱子,然后用箱子的组合满足顾客需要
请输入你苹果的总数:10000000
最少要用24个箱子,分配规则如下:
第1箱:5000000
第2箱:2500000
第3箱:1250000
第4箱:625000
第5箱:312500
第6箱:156250
第7箱:78125
第8箱:39062
第9箱:19531
第10箱:9766
第11箱:4883
第12箱:2441
第13箱:1221
第14箱:610
第15箱:305
第16箱:153
第17箱:76
第18箱:38
第19箱:19
第20箱:10
第21箱:5
第22箱:2
第23箱:2
第24箱:1
请输入顾客要购买的苹果数量:1234567
需要组合的箱子是:
第4箱:625000
第5箱:312500
第6箱:156250
第7箱:78125
第8箱:39062
第9箱:19531
第12箱:2441
第13箱:1221
第15箱:305
第17箱:76
第18箱:38
第20箱:10
第21箱:5
第22箱:2
第24箱:1Process completed.
这是输入50的结果--------------------Configuration: <Default>--------------------
把苹果分配给若干个箱子,然后用箱子的组合满足顾客需要
请输入你苹果的总数:50
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 6
at apple_acount.main(apple_acount.java:61)Process completed.
帮帮忙啦,已经检查一天多了,还是找不出来
public class AppleAndCase {
public static void main(String args[]){
long appleNo = 1000l;
int caseNo = 0;
long appleInCase = 0l;
long sum = 0;
if(appleNo <= 0)
System.out.println("脑残!");
else if(appleNo == 1)
System.out.println("#"+ (caseNo+1) +": "+ appleNo);
else{
while(Math.pow(2, caseNo+1) <= appleNo - sum){
caseNo ++;
appleInCase = (long)Math.pow(2, caseNo);
System.out.println("#"+ caseNo +": "+ appleInCase);
sum += appleInCase;
}
if (appleNo - sum > 0)
System.out.println("#"+ (caseNo+1) +": "+ (appleNo - sum));
}
}
}输出:
#1: 2
#2: 4
#3: 8
#4: 16
#5: 32
#6: 64
#7: 128
#8: 256
#9: 490
public class AppleAndCase {
public static void main(String args[]){
long appleNo = 1000l;
int caseNo = 0;
long appleInCase = 0l;
long sum = 0;
if(appleNo <= 0)
System.out.println("脑残!");
else if(appleNo >= 1){
System.out.println("#"+ (caseNo+1) +": "+ 1); caseNo ++;
sum ++;
while(Math.pow(2, caseNo+1) <= appleNo - sum){
appleInCase = (long)Math.pow(2, caseNo);
caseNo ++;
System.out.println("#"+ caseNo +": "+ appleInCase);
sum += appleInCase;
}
if (appleNo - sum > 0)
System.out.println("#"+ (caseNo+1) +": "+ (appleNo - sum));
}
}
}
输出:
#1: 1
#2: 2
#3: 4
#4: 8
#5: 16
#6: 32
#7: 64
#8: 128
#9: 256
#10: 489