ブルーブリッジカップ - 2013 C ++ Aグループの質問4:逆さま値札[列挙]

I、題し

    マイクのテレビ独占サンプル・ストア他の店の棚を呼び出すことができます。サンプルのTV店。

    その価格は、4桁の数字(すなわち千ドル)です。

    明瞭のLi価格、利便性、予め形成された同様のデジタルを使用して、価格タグの限りデジタルカラーペンを塗装することができるように(図)。

    この価格タグは、いくつかの数字上の特徴を持っている、逆さまには、合理的な数です。以下のような:1256890ことができます。その結果、符号がぶら下がっている場合、それは例えば、別の価格になっていることがあります。1958年には、逆さまにぶら下がっている:8561を、数千ドルああの違い! 

    0は数字で始めることはできませんので、もちろん、ほとんどの場合、読み取りに失敗し、例えば、1110は、元に戻すことはできません。

    ある日、悲劇が起こりました。店員が誤って2つのダウンがハングアップするために値札を置きます。どちらも価格とブランドのテレビセットが完売します!

    幸い、価格が異なります大幅の一つは、200万人以上の値札、値札を失ったが、別の800稼いだ、一緒に、しかし、558元を稼ぎます。

    この情報に基づいて、計算してください:赤字値札を正しい価格はどのくらいであるべきこと?


答えは整数4で、ブラウザから直接番号を提出してください。
注:クラスの内容を説明するには、プロセス、またはその他の援助への回答を提出しないでください。

第二に、アイデア

デジタル1256890は逆に、だけ6,9差がある逆のことができます。

暴力の直接列挙

第三に、問題解決

#include <iostream>
using namespace std;
int main()
{
    int num1[7]={0,1,2,5,6,8,9};//价牌包含的数字
    int num2[7]={0,1,2,5,9,8,6};//价牌翻转对应的数字
    int profit1[1111][2];//利润1
    int profit2[1111][2];//利润2
    int before_reverse;//颠倒前
    int after_reverse;//颠倒后
    int i=0;
    int j=0;
    for (int a=1;a<7;a++) //从1开始,第一位数字不可以是0
    {
        for (int b=0;b<7;b++)
        {
            for (int c=0;c<7;c++)
            {
                for (int d=0;d<7;d++)
                {
                    before_reverse=num1[a]*1000+num1[b]*100+num1[c]*10+num1[d];
                    after_reverse=num2[d]*1000+num2[c]*100+num2[b]*10+num2[a];
                    //因为是颠倒之后所以第一位可以是0
                    if(after_reverse-before_reverse > -300 && after_reverse-before_reverse < -200)
                    //在200-300范围内,我们以正数为准
                    {
                        profit1[i][0]=before_reverse;
                        profit1[i][1]=after_reverse-before_reverse;
                        i++;
                    }
                    else if (after_reverse-before_reverse > 800 && after_reverse-before_reverse < 900)
                    //在800-900范围内
                    {
                        profit1[j][0]=before_reverse;
                        profit2[j][1]=after_reverse-before_reverse;
                        j++;
                    }
                }
            }
        }
    }
    int answer=0;
    for (int a=0;a<i;a++)
    {
        for (int b=0;b<j;b++)
        {
            if(profit1[a][1]+profit2[b][1]==558)
            {
                answer = profit1[a][0];
            }
        }
    }
    cout << answer << endl;
    return 0;
}

 

第四に、結果

9088

プロセスは、終了コードを終了0

公開された57元の記事 ウォンの賞賛9 ビュー3587

おすすめ

転載: blog.csdn.net/Jayphone17/article/details/104237539