题目
标题: 颠倒的价牌
小李的店里专卖其它店中下架的样品电视机,可称为:样品电视专卖店。
其标价都是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
来源:https://www.cnblogs.com/memocean/p/12397295.html