如何量取 6 升水???
本帖最后由 不二如是 于 2024-2-6 20:19 编辑需要 6 升水。
但是,我们手上没有可以快速量取所需升数的桶。
只有两个不同大小的水桶:
大的水桶可以装 9 升水,小的水桶可以装 4 升。
注意:
[*]不存在缺水的问题,可以把不再需要的水拿去浇灌花园里的花
[*]只能用大小桶
请问:需要怎么做才能正好得到 6 升水?
答案:
**** Hidden Message *****
这位鱼油,如果喜欢本帖子,请订阅>>> 专辑 <<<(不喜欢更要订阅{:10_278:} )
我的答案是:
9灌满,倒给4.-----9里有5,4装满
4倒掉,9再倒给4------9里有1,4装满
4倒掉,9再倒给4-------9里有0,4有1
9灌满-------9里有9,4有1
9倒给4------9里有6,4装满
完成 学习编程中的Ben 发表于 2024-2-6 19:01
我的答案是:
9灌满,倒给4.-----9里有5,4装满
4倒掉,9再倒给4------9里有1,4装满
~~{:10_275:} 本帖最后由 zhangchenyvn 于 2024-2-6 19:23 编辑
我的答案是:
这道题我做过,
步数 小桶 大桶
初始 0 0
1st 0 9
2nd 4 5
3rd 0 5
4th 1 4
5th 1 9
6th 4 6
我们小学的家作里有。
现在小学生真卷
@不二如是 ,楼主,这里面还有一个故事,你想听吗?
zhangchenyvn 发表于 2024-2-6 19:22
我的答案是:
这道题我做过,
优雅~ zhangchenyvn 发表于 2024-2-6 19:22
我的答案是:
这道题我做过,
想听{:10_278:} 不二如是 发表于 2024-2-6 19:45
想听
我们班有一个人为了解决这个问题,和家长一起编写了一个程序,在两个水桶之间倒来倒去。。。据说做出了3D效果。。。真卷。。。 本帖最后由 zhangjinxuan 于 2024-2-6 20:14 编辑
我的答案是:信息学照亮世界!
#include <bits/stdc++.h>
using namespace std;
int q, front, rear;
int prv, dist;
void print(int a, int b) {
if (a == 0 && b == 0) {
printf("%d %d\n", a, b);
return;
}
print(prv, prv);
printf("%d %d\n", a, b);
}
signed main() {
memset(dist, 255, sizeof(dist));
q = 0;
q = 0;
dist = 0;
while (rear + 1 != front) {
int a = q, b = q;
// printf("%d %d\n", a, b);
++front;
if (dist == -1) { // 第一桶水接满
dist = dist + 1;
prv = a;
prv = b;
q[++rear] = 4;
q = b;
}
if (dist == -1) { // 第二桶水接满
dist = dist + 1;
prv = a;
prv = b;
q[++rear] = a;
q = 9;
}
if (dist == -1) { // 第二桶水种花
dist = dist + 1;
prv = a;
prv = b;
q[++rear] = a;
q = 0;
}
if (dist == -1) { // 第一桶水种花
dist = dist + 1;
prv = a;
prv = b;
q[++rear] = 0;
q = b;
}
// 第一通水倒进第二桶
int dt = min(a, 9 - b);
if (dist == -1) {
dist = dist + 1;
prv = a;
prv = b;
q[++rear] = a - dt;
q = b + dt;
}
// 第二桶水倒进第一桶
dt = -min(4 - a, b);
if (dist == -1) {
dist = dist + 1;
prv = a;
prv = b;
q[++rear] = a - dt;
q = b + dt;
}
}
print(4, 6);
return 0;
}
0 0 -> 初始状态
0 9 -> 第二桶装满
4 5 -> 第二桶给第一桶
0 5 -> 第一桶清空
4 1 -> 第二桶给第一桶
0 1 -> 第一桶清空
1 0 -> 第二桶给第一桶
1 9 -> 第二桶装满
4 6 -> 第二桶给第一桶 我的答案是:什么? zhangchenyvn 发表于 2024-2-6 19:22
我的答案是:
这道题我做过,
事实上仅仅是一个逻辑问题罢了,并没有难度 zhangjinxuan 发表于 2024-2-6 20:04
我的答案是:信息学照亮世界!
《zhangjinxuan行为》
草,一看才发现你就是zhangjinxuan zhangjinxuan 发表于 2024-2-6 20:04
我的答案是:信息学照亮世界!
精简一下:
#include <bits/stdc++.h>
using namespace std;
int q, front, rear;
int prv, dist;
void print(int a, int b) {
if (a == 0 && b == 0) {
printf("%d %d\n", a, b);
return;
}
print(prv, prv);
printf("%d %d\n", a, b);
}
signed main() {
memset(dist, -1, sizeof(dist));
dist = 0;
q = 0; q = 0;
while (front < rear) {
int a = q, b = q;
int actions = {{4, b}, {a, 9}, {a, 0}, {0, b}};
for (auto &act : actions) {
if (dist]] == -1) {
dist]] = dist + 1;
prv]] = a;
prv]] = b;
q = act;
q = act;
}
}
int dt = min(a, 9 - b);
if (dist == -1) {
update_state(a, b, a - dt, b + dt);
}
dt = min(4 - a, b);
if (dist == -1) {
update_state(a, b, a + dt, b - dt);
}
}
print(4, 6);
return 0;
}
void update_state(int a, int b, int na, int nb) {
dist = dist + 1;
prv = a;
prv = b;
q = na;
q = nb;
}
页:
[1]