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

2023-11-21 04:59

本文主要是介绍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语言算法解决杯子倒水问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/399973

相关文章

Java NoClassDefFoundError运行时错误分析解决

《JavaNoClassDefFoundError运行时错误分析解决》在Java开发中,NoClassDefFoundError是一种常见的运行时错误,它通常表明Java虚拟机在尝试加载一个类时未能... 目录前言一、问题分析二、报错原因三、解决思路检查类路径配置检查依赖库检查类文件调试类加载器问题四、常见

解决IDEA报错:编码GBK的不可映射字符问题

《解决IDEA报错:编码GBK的不可映射字符问题》:本文主要介绍解决IDEA报错:编码GBK的不可映射字符问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录IDEA报错:编码GBK的不可映射字符终端软件问题描述原因分析解决方案方法1:将命令改为方法2:右下jav

MyBatis模糊查询报错:ParserException: not supported.pos 问题解决

《MyBatis模糊查询报错:ParserException:notsupported.pos问题解决》本文主要介绍了MyBatis模糊查询报错:ParserException:notsuppo... 目录问题描述问题根源错误SQL解析逻辑深层原因分析三种解决方案方案一:使用CONCAT函数(推荐)方案二:

Redis 热 key 和大 key 问题小结

《Redis热key和大key问题小结》:本文主要介绍Redis热key和大key问题小结,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、什么是 Redis 热 key?热 key(Hot Key)定义: 热 key 常见表现:热 key 的风险:二、

IntelliJ IDEA 中配置 Spring MVC 环境的详细步骤及问题解决

《IntelliJIDEA中配置SpringMVC环境的详细步骤及问题解决》:本文主要介绍IntelliJIDEA中配置SpringMVC环境的详细步骤及问题解决,本文分步骤结合实例给大... 目录步骤 1:创建 Maven Web 项目步骤 2:添加 Spring MVC 依赖1、保存后执行2、将新的依赖

Spring 中的循环引用问题解决方法

《Spring中的循环引用问题解决方法》:本文主要介绍Spring中的循环引用问题解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录什么是循环引用?循环依赖三级缓存解决循环依赖二级缓存三级缓存本章来聊聊Spring 中的循环引用问题该如何解决。这里聊

Spring Boot中JSON数值溢出问题从报错到优雅解决办法

《SpringBoot中JSON数值溢出问题从报错到优雅解决办法》:本文主要介绍SpringBoot中JSON数值溢出问题从报错到优雅的解决办法,通过修改字段类型为Long、添加全局异常处理和... 目录一、问题背景:为什么我的接口突然报错了?二、为什么会发生这个错误?1. Java 数据类型的“容量”限制

C语言中位操作的实际应用举例

《C语言中位操作的实际应用举例》:本文主要介绍C语言中位操作的实际应用,总结了位操作的使用场景,并指出了需要注意的问题,如可读性、平台依赖性和溢出风险,文中通过代码介绍的非常详细,需要的朋友可以参... 目录1. 嵌入式系统与硬件寄存器操作2. 网络协议解析3. 图像处理与颜色编码4. 高效处理布尔标志集合

Go语言开发实现查询IP信息的MCP服务器

《Go语言开发实现查询IP信息的MCP服务器》随着MCP的快速普及和广泛应用,MCP服务器也层出不穷,本文将详细介绍如何在Go语言中使用go-mcp库来开发一个查询IP信息的MCP... 目录前言mcp-ip-geo 服务器目录结构说明查询 IP 信息功能实现工具实现工具管理查询单个 IP 信息工具的实现服

关于MongoDB图片URL存储异常问题以及解决

《关于MongoDB图片URL存储异常问题以及解决》:本文主要介绍关于MongoDB图片URL存储异常问题以及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录MongoDB图片URL存储异常问题项目场景问题描述原因分析解决方案预防措施js总结MongoDB图