一、題目
小李的店裏專賣其它店中下架的樣品電視機,可稱爲:樣品電視專賣店。
其標價都是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