C语言出错泊松分酒

C语言出错泊松分酒,第1张

错的有些离谱了。。。我不知道是不是编译器问题。。。

#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)

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12324280.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存