博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
计蒜客——无脑博士的试管们
阅读量:6419 次
发布时间:2019-06-23

本文共 3040 字,大约阅读时间需要 10 分钟。

题目:

无脑博士有三个容量分别是 A,B,C 升的试管,A,B,C 分别是三个从 1 到 20 的整数,最初,A和 B 试管都是空的,而 C 试管是装满硫酸铜溶液的。有时,无脑博士把硫酸铜溶液从一个试管倒到另一个试管中,直到被灌试管装满或原试管空了。当然每一次灌注都是完全的。由于无脑博士天天这么折腾,早已熟练,溶液在倒的过程中不会有丢失。

写一个程序去帮助无脑博士找出当 A 试管是空的时候,C 试管中硫酸铜溶液所剩量的所有可能性。

输入格式

输入包括一行,为空格分隔开的三个数,分别为整数 A,B,C。

输出格式

输出包括一行,升序地列出当 A试管是空的时候,C试管溶液所剩量的所有可能性。

样例输入

2 5 10

样例输出

5 6 7 8 9 10

类型:DFS,动态规划

代码:

#include 
#include
#include
using namespace std;int A,B,C;//res[a][b] 存储A B中液体为a b的情况是否遍历过int res[21][21];//深搜 回溯//参数为A B C 试管的液体总量void backtrace(int a,int b,int c){ res[a][b] = 1; int a0 = a, b0 = b, c0 = c; if(a < A){ //A未满 if(b > 0){ //B -> A if(b >= A-a){ // A倒满 b = b-A+a; a = A; } else{ //B倒空 a += b; b = 0; } if(res[a][b] == 0)backtrace(a,b,c); a = a0; b = b0; } if(c > 0){ //C -> A if(c >= A-a){ // A倒满 c = c-A+a; a = A; } else{ //C倒空 a += c; c = 0; } if(res[a][b] == 0)backtrace(a,b,c); a = a0; c = c0; } } if(b < B){ //B未满 if(a > 0){ //A -> B if(a >= B-b){ // B倒满 a = a-B+b; b = B; } else{ //A倒空 b += a; a = 0; } if(res[a][b] == 0)backtrace(a,b,c); a = a0; b = b0; } if(c > 0){ //C -> B if(c >= B-b){ // B倒满 c = c-B+b; b = B; } else{ //C倒空 b += c; c = 0; } if(res[a][b] == 0)backtrace(a,b,c); b = b0; c = c0; } } if(c < C){ //C未满 if(a > 0){ //A -> C if(a >= C-c){ // C倒满 a = a-C+c; c = C; } else{ //A倒空 c += a; a = 0; } if(res[a][b] == 0)backtrace(a,b,c); a = a0; c = c0; } if(b > 0){ //B -> C if(b >= C-c){ // C倒满 b = b-C+c; c = C; } else{ //B倒空 c += b; b = 0; } if(res[a][b] == 0)backtrace(a,b,c); b = b0; c = c0; } }}int main(){ scanf("%d %d %d",&A,&B,&C); backtrace(0,0,C); /*for(int i=0; i<21; i++){ for(int j=0; j<21; j++){ cout << res[i][j] << " "; } cout << endl; }*/ int k=0; for(int i=B; i >= 0; i--){ //cout << res[0][i] << " "; if(res[0][i] == 1){ if(k==0){ cout << C-i; k=1; } else{ cout << " " << C-i ; } } } cout << endl; return 0;}

 PS: 注意输出格式,最后没有空格.....

转载于:https://www.cnblogs.com/farewell-farewell/p/8672553.html

你可能感兴趣的文章
ubuntu下安装摄像头应用程序xawtv
查看>>
GFS2,GFS,EXT2,EXT3 SEQ-write performance compare
查看>>
PostgreSQL 如何比较两个表的定义是否一致
查看>>
PHPCMS2008利用EXP
查看>>
扩展android-volley来开发Android restful client
查看>>
Linux Mint下Kindle Fire调试android程序
查看>>
自定义Background
查看>>
git笔记
查看>>
Android开源中国客户端学习 配置文件读写 以及其他一些工具类 <13>
查看>>
国外的opencv识别文档
查看>>
java获取指定字符串的下一个
查看>>
多行数据提交到Struts的ActionForm的List属性中
查看>>
理解RESTful架构
查看>>
Linux自动压缩备份目录文件与恢复
查看>>
Android 图片相关整理
查看>>
创建一个Hello World(React),组件的作用
查看>>
java中的context
查看>>
Spring源码阅读——3
查看>>
使用ZXing生成可供手机识别的二维码
查看>>
griedview setOnItemLongClickListener 无效
查看>>