错的有些离谱了。。。我不知道是不是编译器问题。。。
#include<stdio.h>int i,n
int probo(int a,int bv,int cv){
int n=0,b=0,c=0
while(!(a==i||b==i||c==i)){
if(!b)
if(a<bv) { n=-1break }
else{ a-=bv,b=bv }
else if(c==cv){ a+=cvc=0 }
else if(b+cv==i){ a-=cv-cc=cv }
else if(b>cv-c){ b-=(cv-c)c=cv }
else {c+=bb=0 }
n++
}
return(n)
}
void practice(int a,int bv,int cv){
int b=0,c=0,x=0
printf("枣差平分酒的分法:\n")
printf("酒瓶%d 旅岩销空杯%d 空杯%d\n",a,bv,cv)
printf(" %6d %6d %6d\n",a,b,c)
while(!(a==i||b==i||c==i)){
if(!b) { a-=bvb=bv }
else if(c==cv){ a+=cvc=0 }
else if(b+cv==i){ a-=cv-cc=cv }
else if(b>cv-c){ b-=(cv-c)c=cv }
else { c+=bb=0 }
x++
printf("%3d:%6d%6d%6d\n",x,a,b,c)
}
printf("平分酒共分倒%d次.\n",n)
}
int main()
{
int a,bv,cv,m1,m2
printf("\n请输入酒总量(偶数):")scanf("%d",&a)
printf("两空杯容量bv,cv分别为:")
scanf("%d,%d",&bv,&cv)
i=a/2
if(bv+cv<i)
{ printf("空标容量太小,无法平分!\n")return 0 }
m1=probo(a,bv,cv) m2=probo(a,cv,bv)
if(m1<0 && 拆游m2<0)
printf("无法平分!")
if(m1>0 && (m2<0||m1<m2))
{ n=m1practice(a,bv,cv) }
if(m2>0 && (m1<0||m2<m1))
{ n=m2practice(a,cv,bv)}
}
你发的代码太乱了,一点条理性也没有。首先,主函数必须定义为int型,在部分编译器中不定义或void型也不会报错,但int型不管怎么编译都不会错。
其次,调用的函数必须在调用之前申明。
还有就是小写字母不要打成大写字母。
最后,注意缩进,不然看起来太乱。
3斤茄孝瓶是空的用便捷的方法分出5斤酒是吧,3斤瓶剩2斤,10斤瓶剩1斤。分次三次用3斤装入7斤瓶蔽闷。然后7斤瓶倒回10斤瓶,7斤瓶就是5斤了。3斤瓶倒入7斤瓶,7斤瓶剩2斤,这样,10斤瓶有8斤,再装满个3斤瓶倒入7斤瓶。宏纳弯这样想了我好久,终于哗脊搞定了,哈哈,我只写了我的算法,从键盘输入的部分你自己去做晌并掉吧public class Test001 {
int result
int[]o=new int[3]
int[]b=new int[3]
ArrayList<int[]>record2=new ArrayList<int[]>()
private boolean equalsRecord2(int[] target){
for(int[] x:record2){
int counter=0
for(int i=0i<3i++){
if(target[i]==x[i]){
counter++
}
}
if(counter==3){
return true
}
}
return false
}
public void h(int b1,int b2,int b3,int o1,int o2,int o3,int target){
o[0]=o1
o[1]=o2
o[2]=o3
b[0]=b1
b[1]=b2
b[2]=b3
result=target
record2.add(o)
if(o[0]==result||o[1]==result||o[2]==result){
prt()
System.exit(0)
}
f(o)
System.out.println("无解")
}
private void f(int [] o){
int[] oil=o.clone()
for(int i=0i<6i++){
int[] target=g(oil,i)
for(int j=0j<3j++){
if(target[j]==result){
System.out.print("结宴芦迹果是:")
record2.add(target)
prt()
System.exit(0)
}
}
if(equalsRecord2(target)){
continue
}
record2.add(target)
f(target)
}
record2.remove(record2.size()-1)
}
private void prt(){
int count=1
for(int j=0j<record2.size()j++){
for(int i=0i<3i++){
System.out.print(record2.get(j)[i]+",")
}
System.out.print("#")
}
System.out.println()
}
private int[] g(int [] oil, int i){
int x=oil[0]
int y=oil[1]
int z=oil[2]
int sumxy=x+y
int sumxz=x+z
int sumyz=y+z
switch(i){
case 0:
if(sumxy>b[1]){
x=sumxy-b[1]
y=b[1]
}
else{
x=0
y=sumxy
}
break
case 1:
if(sumxy>b[0]){
y=sumxy-b[0]
x=b[0]
}
else{
y=0
x=sumxy
}
break
case 2:
if(sumxz>b[2]){
x=sumxz-b[2]
z=b[2]
}
else{
x=0
z=sumxz
}
break
case 3:
if(sumxz>b[0]){
z=sumxz-b[0]
x=b[0]
}
else{
z=0
x=sumxz
}
break
case 4:
if(sumyz>b[2]){
y=sumyz-b[2]
z=b[2]
}
else{
y=0
z=sumyz
}
break
case 5:
if(sumyz>b[1]){
z=sumyz-b[1]
y=b[1]
}
else{
z=0
y=sumyz
}
break
}
return new int[]{x,y,z}
}
public static void main(String[] args) {
new Test001().h(12,8,5,12,0,0,8)
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)