首页 倒酒问题

倒酒问题

举报
开通vip

倒酒问题学号:2009115020322 倒酒问题 问题描述: 有2个八两的酒瓶,装满了酒,只有一个三两的酒杯。问如何倒酒才能让四个人平均分到这十六两酒,即每人喝四两。用C语言编写。看了网上很少有人写过这个程序,即便是写过,也不是计算机智能完成的,倒像是自己先知道怎么倒酒了,然后模拟计算机完成自己的步骤。实现代码: #include #define MAXSTEP 100 int index = 0; typedef struct LNode{ int x; int y; int v; int a[...

倒酒问题
学号:2009115020322 倒酒问 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题 问题描述: 有2个八两的酒瓶,装满了酒,只有一个三两的酒杯。问如何倒酒才能让四个人平均分到这十六两酒,即每人喝四两。用C语言编写。看了网上很少有人写过这个程序,即便是写过,也不是计算机智能完成的,倒像是自己先知道怎么倒酒了,然后模拟计算机完成自己的步骤。实现代码: #include #define MAXSTEP 100 int index = 0; typedef struct LNode{ int x; int y; int v; int a[4]; int step; }LNode; LNode p; int xy(void) { int temp; if(p.y == 8||p.x == 8)return 0; else if(p.x + p.y > 8){ temp = p.y; p.y = 8; p.x -= 8 - temp; return 1; } else{ p.y += p.x; p.x = 0; return 1; } } int xv(void) { int temp; if(p.v == 3)return 0; else if(p.x + p.v > 3){ temp = p.v; p.v = 3; p.x -= 3 - temp; return 1; } else{ p.v += p.x; p.x = 0; return 1; } } int yx(void) { int temp; if(p.x == 8 || p.y == 8)return 0; else if(p.y + p.x > 8){ temp = p.x; p.x = 8; p.y -= 8 - temp; return 1; } else{ p.x += p.y; p.y = 0; return 1; } } int yv(void) { int temp; if(p.v == 3)return 0; else if(p.y + p.v > 3){ temp = p.v; p.v = 3; p.y -= 3 - temp; return 1; } else{ p.v += p.y; p.y = 0; return 1; } } int vx(void) { int temp; if(p.x == 8)return 0; else if(p.v + p.x > 8){ temp = p.x; p.x = 8; p.v -= 8 - temp; return 1; } else{ p.x += p.v; p.v = 0; return 1; } } int vy(void) { int temp; if(p.y == 8)return 0; else if(p.v + p.y > 8){ temp = p.y; p.y = 8; p.v -= 8 - temp; return 1; } else{ p.y += p.v; p.v = 0; return 1; } } int assign() { int min, i; i = 0; min = (!p.y||(p.v < p.y && p.v != 0))? p.v : p.y; min = (!min||(p.x < min && p.x != 0))? p.x : min; if(min > 4||min == 0)return 0; while(p.a[i]!=0 && i < 4)i++; if (i < 4){ p.a[i] = min; if(p.v == min) p.v = 0; else if(p.y == min) p.y = 0; else p.x =0; return 1; } else { i = 0; while (min + p.a[i] != 4 && i < 4) i++; if(i < 4){ p.a[i] = 4; if(p.v == min) p.v = 0; else if(p.y == min) p.y = 0; else p.x =0; return 1; } else{ i = 0; while (min + p.a[i] > 4 && i < 4) i++; if( i < 4){ p.a[i] += min; if(p.v == min) p.v = 0; else if(p.y == min) p.y = 0; else p.x =0; return 1; } else return 0; } } } void initial(LNode l[]) { l[0].x = l[0].y = 8; l[0].v =0; int i; for(i = 0; i < 4; i++) l[0].a[i] = 0; l[0].step = '0'; } void addnode(LNode l[]) { int i; ++index; l[index].x = p.x; l[index].y = p.y; l[index].v = p.v; for(i = 0;i < 4; i++) l[index].a[i] = p.a[i]; l[index].step = '0'; } int search(LNode l[]) { int i; for(i = 0; i <= index; ++i) { if(p.v==l[i].v) if(p.x==l[i].x&&p.y==l[i].y||p.y==l[i].x&&p.x==l[i].y) return 0; } return 1; } void back(LNode l[]) { while((l[index].step += 1) > '6') --index; } void readdata(LNode l[]) { int i; p.x = l[index].x; p.y = l[index].y; p.v = l[index].v; for(i = 0;i < 4; i++) p.a[i] = l[index].a[i]; p.step = l[index].step; } int next(void) { int ok; switch(p.step){ case'0': ok = assign(); break; case'1': ok = xv(); break; case'2': ok = yv(); break; case'3': ok = vx(); break; case'4': ok = vy(); break; case'5': ok = xy(); break; case'6': ok = yx(); break; } return ok; } void main() { int i,j; LNode list[MAXSTEP]; initial(list); readdata(list); while(!(p.x==0&&p.y==0&&p.v==0)) { readdata(list); if(next()&&search(list)) addnode(list); else back(list); } for(i = 0; i <=index; ++i) { printf("%d %d %d\t",list[i].x,list[i].y,list[i].v); for(j = 0; j < 4; ++j) printf("%d ",list[i].a[j]); printf("\n"); } } 更多问题请搜2009115020322
本文档为【倒酒问题】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_266065
暂无简介~
格式:doc
大小:29KB
软件:Word
页数:0
分类:互联网
上传时间:2019-08-16
浏览量:14