蓝桥杯2013-省赛-C/C++-A组4题

北城以北 提交于 2020-03-02 19:05:27

题目
标题: 颠倒的价牌


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

    其标价都是4位数字(即千元不等)。

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

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

    当然,多数情况不能倒读,比如,1110 就不能倒过来,因为0不能作为开始数字。

    有一天,悲剧终于发生了。某个店员不小心把店里的某两个价格牌给挂倒了。并且这两个价格牌的电视机都卖出去了!

    庆幸的是价格出入不大,其中一个价牌赔了2百多,另一个价牌却赚了8百多,综合起来,反而多赚了558元。

    请根据这些信息计算:赔钱的那个价牌正确的价格应该是多少?


答案是一个4位的整数,请通过浏览器直接提交该数字。
注意:不要提交解答过程,或其它辅助说明类的内容。

答案

9088

代码

 

 1 /*2013-蓝桥杯-省-A-4*/ 
 2 #include<iostream>
 3 #include<map>
 4 #include<vector> 
 5 #include<algorithm>
 6 using namespace std;
 7 map<char ,char> rev_map;
 8 char num[7]={'1','2','5','6','8','9','0'};
 9 vector<int > g800p;
10 map<int , int > g800p_profmap;
11 vector<int > l200p;
12 map<int ,int > l200p_profmap;
13 struct val{
14     char a[4];
15 };
16 
17 void init(){
18     rev_map['1']='1';
19     rev_map['2']='5';
20     rev_map['6']='9';
21     rev_map['8']='8';
22     rev_map['9']='6';
23     rev_map['0']='0'; 
24 }
25 int str2int(char a[]){
26     int temp=0;
27     temp=a[0]-'0'+10*(a[1]-'0')+100*(a[2]-'0')+1000*(a[3]-'0');
28     return temp;
29 }
30 void dfs(val cur,int pos){
31     if(pos==4){
32         if(cur.a[0]=='0'||cur.a[3]=='0'){
33             return;
34         }else{
35             char b[4];
36             int bef_val=str2int(cur.a);
37             reverse_copy(cur.a,cur.a+4,b);
38             b[0]=rev_map[b[0]];
39             b[1]=rev_map[b[1]];
40             b[2]=rev_map[b[2]];
41             b[3]=rev_map[b[3]];
42             int aft_val=str2int(b);
43             int prof=aft_val-bef_val;
44             if(prof>800&&prof<900){
45                 //cout<<"find: (800)  "<<bef_val<<endl;
46                 //cout<<prof<<endl;
47                 g800p.push_back(bef_val);
48                 g800p_profmap[bef_val]=prof;
49             }
50             if(prof<-200&&prof>-300){
51                 //cout<<"find: (-200)  "<<bef_val<<endl;
52                 //cout<<prof<<endl;
53                 l200p.push_back(bef_val);
54                 l200p_profmap[bef_val]=prof;
55             }
56             
57             return;
58         }
59     }else{
60         for(int i=0;i<7;i++){
61             cur.a[pos]=num[i];
62             dfs(cur,pos+1);
63         }
64     }
65 }
66 int main(){
67     init();
68     val a;
69     dfs(a,0);
70     cout<<"dfs ok"<<endl;
71     for(vector<int>::iterator iter1=g800p.begin();iter1!=g800p.end();iter1++){
72         for(vector<int>::iterator iter2=l200p.begin();iter2!=g800p.end();iter2++){
73         if(g800p_profmap[*iter1]+l200p_profmap[*iter2]==558){
74             cout<<*iter2<<" "<<endl;
75             break;
76             }
77         }
78     }    
79     return 0;
80 } 
81  

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!