【问题标题】:Asking ideas of a codeforces problem (Problem-483A Counterexample)询问 codeforces 问题的想法(Problem-483A Counterexample)
【发布时间】:2020-01-12 02:14:02
【问题描述】:

问题链接:http://codeforces.com/problemset/problem/483/A

你需要找到三个数(a, b, c),使得l ≤ a 

我想知道解决这个问题的想法。

编辑:

这是我的尝试:

#include<iostream>
#include<cstdlib>
using namespace std;
int main()
{
    int l, r, i, c;
    cin >> l >> r;
    c = r - l;

    if(c <= 50)
    {
        if(c >= 2)
        {
            for(i = l; i <= r; i++)
            {
                if(i % 2 == 0)
                {
                    cout << i << " " << i+1 << " " << i+2 << endl;
                    break;
                }
            }
        }
        else if(c <= 1)
        {
            cout << "-1" << endl;
        }
    }
}

我的代码有什么问题?网站上的错误信息是

Probably, the solution is executed with error 'uninitiaized value usage' on the line 10

【问题讨论】:

    标签: math functional-programming brute-force number-theory


    【解决方案1】:

    如果 l 和 r 的距离小于 2,则不存在这样的三元组,因为我们希望它们都是不同的。

    如果他们的距离是 2,唯一的可能是选择是 l, l+1, l+2。如果 l 是偶数,那么它是一个有效的反例。但是,如果 l 是奇数,则没有这样的反例,因为 l 和 l+1 互质,所以 l+1 和 l+2 必须互质,但 l 和 l+2 不能有 2 作为公因数因为它们是奇数。

    如果距离大于2,只需选择a为最小的偶数,至少与l一样大,并返回(a, a+1, a+2)。 a 和 a+2 的公因数为 2。

    在显示尝试后编辑,这是一个可能的 C++ 代码:

    #include<iostream>
    #include<cstdlib>
    using namespace std;
    int main()
    {
        long long l,r,i,c, first;
        cin >> l >> r;
        c=r-l;
        if ((c<2) || (c==2) && (l%2 == 1)){
            cout << "-1" << endl;
        }
        else{
            first = l + l % 2;
            cout << first << " " <<first+1 << " " << first+2 << endl;
        }
    }
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-16
    • 2020-11-26
    • 2021-04-22
    • 1970-01-01
    • 2021-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多