c语言算法解决杯子倒水问题

编程入门 行业动态 更新时间:2024-10-18 14:18:52

c语言<a href=https://www.elefans.com/category/jswz/34/1770096.html style=算法解决杯子倒水问题"/>

c语言算法解决杯子倒水问题

#include <cstdio>int sv[1024];
int sv_cnt;
int ans[32];
int ans_cnt;
char str[32][128];
bool find_same(int scene)
{for (int i = 0; i < 1024; i++) {if (sv[i] == scene){return true;}}return false;
}//三个杯子 abc  a的容量是3 b的容量是7 c的容量是10
void solve(int a,int b,int c)
{int cup[3] = { a,b,c };int v[3] = { 3,7,10 };int r1, r2;if ((b == 5 && c == 5)) {int t1, t2, t3;for (int i = 0; i < ans_cnt; i++) {printf("%s", str[i]);//printf("%03x \n", ans[i]);t1 = ans[i]/16/16;t2 = ans[i] / 16 % 16;t3 = ans[i] % 16;for (int j = 10; j > 0; j--) {if (j <= t1) printf("■  ");else if (j <= 3) printf("□  ");else printf("    ");if (j <= t2) printf("■  ");else if (j <= 7) printf("□  ");else printf("    ");if (j <= t3) printf("■  ");else  printf("□  ");printf("\n");}}return;}for (int i = 0; i < 3; i++){for (int j = 0; j < 3; j++) {//不能自己倒给自己 而且当自己的杯子没水的时候也不能倒if (i == j || cup[i] <= 0)continue;r1 = v[j] - cup[j]; //第j个杯子还可以倒r1升水//如果第i个杯子大于r1升水 就倒掉r1升水if (cup[i] >= r1) {cup[i] -= r1;cup[j] += r1;sprintf(str[ans_cnt], "将容积为%dL杯子中的%d升水倒入容积为%dL杯子中\n",v[i],r1,v[j]);}else {//如果没有就倒掉全部cup[j] += cup[i];sprintf(str[ans_cnt], "将容积为%dL杯子中的%d升水倒入容积为%dL杯子中\n", v[i], cup[i], v[j]);cup[i] = 0;}//如果当前的情况没有出现过就进行递归if (!find_same(cup[0] * 16 * 16 + cup[1] * 16 + cup[2])){//记录一下这个情况sv[sv_cnt++] = cup[0] * 16 * 16 + cup[1] * 16 + cup[2];ans[ans_cnt++]= cup[0] * 16 * 16 + cup[1] * 16 + cup[2];solve(cup[0], cup[1], cup[2]);ans_cnt--;}//回溯cup[0] = a;cup[1] = b;cup[2] = c;}}
}int main()
{solve(0, 0, 10);return 0;
}



更多推荐

c语言算法解决杯子倒水问题

本文发布于:2024-02-12 04:51:32,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1686122.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:算法   杯子   语言

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!