藍橋杯——2013年C++A組第4題:顛倒的價牌【枚舉】

一、題目

    小李的店裏專賣其它店中下架的樣品電視機,可稱爲:樣品電視專賣店。

    其標價都是4位數字(即千元不等)。

    小李爲了標價清晰、方便,使用了預製的類似數碼管的標價籤,只要用顏色筆塗數字就可以了(如圖)。

    這種價牌有個特點,對一些數字,倒過來看也是合理的數字。如:1 2 5 6 8 9 0 都可以。這樣一來,如果牌子掛倒了,有可能完全變成了另一個價格,比如:1958 倒着掛就是:8561,差了幾千元啊!! 

    當然,多數情況不能倒讀,比如,1110 就不能倒過來,因爲0不能作爲開始數字。

    有一天,悲劇終於發生了。某個店員不小心把店裏的某兩個價格牌給掛倒了。並且這兩個價格牌的電視機都賣出去了!

    慶幸的是價格出入不大,其中一個價牌賠了2百多,另一個價牌卻賺了8百多,綜合起來,反而多賺了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

Process finished with exit code 0

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章