老师布置的分酒问题,求C语言或MATLAB程序,跪求大佬解答

老师布置的分酒问题,求C语言或MATLAB程序,跪求大佬解答,第1张

#include<stdio.h>

int i

void getti(int a,int y,int z)

 

int main()

{

int a,y,z

printf("input full a, empty b,c,get i:")

scanf("%d%d%d%d"祥卜,&a,&y,&z,&i)

getti(a,y,z)

getti(a,y,z)

return 0

}

void getti(int a,int y,int z)

{

int 哗宴银b=0,c=0

printf("a%d b%d c%d\n%4d%4d%4d\n",a,y,z,a,b,c)

while(a!=i||(b!=i&乱宴&c!=i)) {

if(!b)

{ a-=yb=y }

else if(c==z)

{ a+=zc=0 }

else if(b>z-c)

{

b-=(z-c)c=z

}

else {  c+=bb=0  }

printf("%4d%4d%4d\n",a,b,c)

}

}

到油问题解题报告

[问题描述]:

2、分油问题(work2.pas)

[问题描述]

设有大小不等的3个无刻度的油桶,分别能够存满,X,Y,Z公升油(例如X=80,Y=50,Z=30)。初始时,第一个油桶盛满油,第二、三个油桶为空。编程寻找一种最少步骤的分油方式,在某一个油桶上分出targ升油(例如targ=40)。若找到解,则将分油方法打印出来;否则打印信息“UNABLE”等字样,表示问题无解。

输入输出:

输入文件(work2.in)一行4个整数,依次表示缺乎X,Y,Z,targ,每个数之间用一个空仔凳格隔开;

输出文件(work2.out)表示解的情况伏戚悉,如果无解输出UNABLE,如果有解,则输出分油方法(每一步三个油桶的状态),如果解不唯一也只有输出任一个解,如:

输入:80 50 30 40

则输出:

80 0 0

30 50 0

30 20 30

60 20 0

60 0 20

10 50 20

10 40 30

[基本思想]:

用一个二维数组来存储每一次产生的状态,出现正确答案或所有情况都找完时停止,每个状态分x,y,z和前导值,用以输出使用。

[数据结构]:

program work2

var a:array[1..30,1..4]of integer

b:array[1..3]of integer{记录原x,y,z值}

t,h,r,f:integer

[程序];

procedure dao(x,y,z:integer){到油过程}

var i:integer

begin

r:=r+1

if a[h,x]+a[h,y]>b[y] then begin a[r,x]:=a[h,x]+a[h,y]-b[y]a[r,y]:=b[y]a[r,z]:=a[h,z]end

else begin a[r,y]:=a[h,x]+a[h,y]a[r,x]:=0a[r,z]:=a[h,z]end

a[r,4]:=h

for i:=1 to r-1 do if (a[r,x]=a[i,x])and(a[r,y]=a[i,y]) then begin a[r,x]:=0a[r,y]:=0a[r,z]:=0a[r,4]:=0r:=r-1exitend{是否有重复};

if (a[r,x]=t)or(a[r,y]=t) then f:=1

end

procedure print(r:integer)

begin

if a[r,4]<>0 then print(a[r,4])

writeln(a[r,1],' ',a[r,2],' ',a[r,3])

end

begin

assign(input,'work2.in')

reset(input)

assign(output,'work2.out')

rewrite(output)

readln(b[1],b[2],b[3],t)

a[1,1]:=b[1]

a[1,2]:=0

a[1,3]:=0

a[1,4]:=0

h:=1r:=1f:=0

while (f=0)and(h<=r) do

begin

if a[h,1]>0 then dao(1,2,3)

if (f=0)and(a[h,1]>0) then dao(1,3,2)

if (f=0)and(a[h,2]>0) then dao(2,1,3)

if (f=0)and(a[h,2]>0) then dao(2,3,1)

if (f=0)and(a[h,3]>0) then dao(3,1,2)

if (f=0)and(a[h,3]>0) then dao(3,2,1){到油方案}

h:=h+1

end

if h>r then writeln('no answer',h,r)

else print(r){打印}

close(input)

close(output)

end.

[问题总结]:

本题并不难,只要熟悉宽搜的基本思路,就一定能解开。


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存