本文已参与「新人创作礼」活动,一起开启掘金创作之路。
2、量水问题描述
对量水问题给出产生式系统描述,并画出状态空间图。有两个无刻度标志的水壶,分别可装5升和2升的水。设另有一水缸,可用来向水壶灌水或倒出水,两个水壶之间,水也可以相互倾灌。已知5升壶为满壶,2升壶为空壶,问如何通过倒水或灌水操作,使能在2升的壶中量出一升的水来。
基本要求:
要求:写出算法的设计思想和源程序,并以图形用户界面实现人机交互,进行输入和输出结果,如:Please input L1: 5 Please input L2: 2
Successed or Failed?: Successed
Optimal Procedure: 50->32->30->12->10->01
用两个没有刻度的容器量出一定量的水 (1)首先判断有没有容器符合题干的取水量,如果有,则结束,如果没有则进行操作 (2)如果两个容器都是空的,则向第一个容器里面加满水,然后将第一个容器里面的水加入到第二个容器里面,在加水前,判断两个容器的存水量,进而对加水后的容器的存水量进行修改,如果第一个容器此时还没有满足题干要求,则判断第二个容器是不是满了,如果第二个容器已满,则将第二个容器里面的水全部倒出,转操作(1)
#include<iostream>
using namespace std;
int main()
{
int X, Y; //容器的容量
cout << "请分别输入A,B的容量:";
cin >> X >> Y;
int S; //需要量出的水;
cout << "请输入需要量出的水的量:";
cin >> S;
int a = 0, b = 0; //容器现有的状态
while (b != S&&a!=S)
{
if (a == 0)
{
a = X;
cout << a<<b<<"->";
}
else
{
if (a + b >= Y)
{
a = a + b - Y;
b = Y;
cout << a << b << "->";
}
else
{
b = a + b;
a = 0;
cout << a << b << "->";
}
if (a != S)
{
if (b == Y)
{
b = 0;
cout << a << b << "->";
}
}
}
}
return 0;
}