倒水,哪里出问题了?

问题描述

| 我已经完成了从SPOJ浇水。但是,系统总是给出错误的答案。但是我找不到哪里出了问题。 请给个提示。测试用例也受到赞赏。
#include <iostream>

int countFromA (int a,int b,int c);

int main() {
    int t;
    std::cin>>t;
    std::cin.ignore(5,\'\\n\'); // SPOJ error: iostream limit
    while (t--) {
        int a,b,c;
        std::cin>>a>>b>>c;
        if (c == 0) {
            std::cout<<\"0\"<<std::endl;
        }
        else if (a == c || b == c) {
            std::cout<<\"1\"<<std::endl;
        }
        else if ((a < c && b < c) || (a == b)) {
            std::cout<<\"-1\"<<std::endl;
        }
        else {
            int fromA = countFromA (a,c);
            int fromB = countFromA (b,a,c);
            int result;
            if (fromA == -1) {
                result = fromB;
            }
            else if (fromB == -1) {
                result = fromA;
            }
            else if (fromA <= fromB) {
                result = fromA;
            }
            else {
                result = fromB;
            }
            std::cout<<result<<std::endl;
        }
    }
}

int countFromA (int a,int c) {
    int times = 0;
    int a_in = 0;
    int b_in = 0;
    // fill a
    a_in = a;
    times++;
    while (true) {
        // a->b & test
        if (a_in > (b - b_in)) {
            a_in = a_in - (b - b_in);
            b_in = b;
            times++;
            if (a_in == c) {
                return times;
            }
        }
        else {
            b_in = b_in + a_in;
            a_in = 0;
            times++;
答:应该在这里添加测试。我在假设
a > b
的情况下进行编码,而在重用它时,我忘记了。
        }
        // fill a / empty b
        if (b_in == b) {
            b_in = 0;
        }
        else {
            a_in = a;
        }
        times++;
        // finish
        if (a_in == b - b_in) {
            return -1;
        }
    }
}
我的算法首先检查特殊情况
if
else if
else if
,然后在
else
中进行主要计算。对于“ 6”部分,我编写了一个函数从第一个变量倒入第二个变量。     

解决方法

        这是一个提示。由于这是为了您的利益而进行的编码练习,因此我不会为您提供完整的答案。 您可能需要按任意顺序组合4种不同的操作来获得答案。假设您的数字是
21,3,15
。您需要同时查看将
b
倾倒到
a
中,直到您在那里有ѭ11fill,或者填充fill10ѭ,将其继续倒入
b
中,然后倾倒
b
直到剩下
15
。您当前的操作仅尝试单个操作序列。您需要以某种方式从头开始尝试两者,然后选择最佳的。     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...