博客园 首页 私信博主 显示目录 隐藏目录 管理

颠倒的牌价--(模拟)

小李的店里专卖其它店中下架的样品电视机,可称为:样品电视专卖店。

其标价都是4位数字(即千元不等)。 小李为了标价清晰、方便,使用了预制的类似数码管的标价签,只要用颜色笔涂数字就可以了(参见p1.jpg)。

这种价牌有个特点,对一些数字,倒过来看也是合理的数字。如:1 2 5 6 8 9 0 都可以。这样一来,如果牌子挂倒了,有可能完全变成了另一个价格,

比如:1958 倒着挂就是:8561,差了几千元啊!! 当然,多数情况不能倒读,比如,1110 就不能倒过来,因为0不能作为开始数字。 有一天,悲剧终于发生了。

某个店员不小心把店里的某两个价格牌给挂倒了。并且这两个价格牌的电视机都卖出去了! 庆幸的是价格出入不大,其中一个价牌赔了2百多,另一个价牌却赚了8百多,

综合起来,反而多赚了558元。 请根据这些信息计算:赔钱的那个价牌正确的价格应该是多少?

 1 #include<iostream>
 2 using namespace std;
 3 /*
 4 下面的数字是合法的颠倒 
 5 1 1
 6 2 2
 7 5 5
 8 6 9
 9 8 8
10 9 6
11 0 0
12 */
13 int flag[10]={0,1,2,-1,-1,5,9,-1,8,6};
14 int ans=0;
15 
16 bool valid(int x){
17     while(x){
18         if(flag[x%10]==-1) return false;
19         x/=10;
20     }
21     return true;
22 }
23 
24 int rev(int x){
25     int d=0;
26     while(x){
27         d=d*10+flag[x%10];
28         x/=10;
29     }
30     return d;
31 }
32 
33 int main(int argc, char const *argv[])
34 {
35     for( int i=1001; i<=9999; i++ ){
36         for( int j=1001; j<=9999; j++ ){
37             if(valid(i)&&valid(j)){
38                 int d1=i-rev(i);
39                 int d2=rev(j)-j;
40                 if(d1>=200&&d1<=300&&d2>=800&&d2<=900&&(d2-d1==558)){
41                     ans++;
42                     cout<<i<<" "<<rev(i)<<" "<<j<<" "<<rev(j)<<endl;
43                 }
44             }
45         }
46     }
47     return 0;
48 }

 

posted @ 2019-03-01 09:45  Brave_WTZ  阅读(148)  评论(0编辑  收藏  举报