/*
标题: 颠倒的价牌
小李的店里专卖其它店中下架的样品电视机,可称为:样品电视专卖店。
其标价都是4位数字(即千元不等)。
小李为了标价清晰、方便,使用了预制的类似数码管的标价签,只要用颜色笔涂数字就可以了(参见p1.jpg)。
这种价牌有个特点,对一些数字,倒过来看也是合理的数字。如:1 2 5 6 8 9 0 都可以。这样一来,如果牌子挂倒了,有可能完全变成了另一个价格,比如:1958 倒着挂就是:8561,差了几千元啊!!
当然,多数情况不能倒读,比如,1110 就不能倒过来,因为0不能作为开始数字。
有一天,悲剧终于发生了。某个店员不小心把店里的某两个价格牌给挂倒了。并且这两个价格牌的电视机都卖出去了!
庆幸的是价格出入不大,其中一个价牌赔了2百多,另一个价牌却赚了8百多,综合起来,反而多赚了558元。
请根据这些信息计算:赔钱的那个价牌正确的价格应该是多少?
答案:9088
*/
#include <iostream>
using namespace std;
int crr1[5000],c1=0;
int drr1[5000],d1=0;
int crr2[5000],c2=0;
int drr2[5000],d2=0;
void method(int sum,int brr[]){
for(int i=0;i<4;i++){
if(brr[i]==6){
brr[i++]=9; //注意i++,避免第二个if循环将9又改成6
}
if(brr[i]==9){
brr[i]=6;
}
}
int sum2=brr[3]*1000+brr[2]*100+brr[1]*10+brr[0]*1;
if(sum-sum2>200&&sum-sum2<300){ //赔了200多
crr1[c1++]=sum;
crr2[c2++]=sum2;
}
if(sum2-sum>800&&sum2-sum<900){ //赚了800多
drr1[d1++]=sum;
drr2[d2++]=sum2;
}
}
int main(){
int arr[7]={0,1,2,5,6,8,9}; //可以颠倒的数字数组
for(int i=1;i<7;i++){
for(int j=0;j<7;j++){
for(int k=0;k<7;k++){
for(int p=1;p<7;p++){
int sum=arr[i]*1000+arr[j]*100+arr[k]*10+arr[p]*1;
int brr[4];
brr[0]=arr[i];brr[1]=arr[j];brr[2]=arr[k];brr[3]=arr[p];
method(sum,brr); //筛选符合要求的四位数字
}
}
}
}
for(int i=0;i<c1;i++){
for(int j=0;j<d1;j++){
if(drr2[j]+crr2[i]-drr1[j]-crr1[i]==558){ //赚了558元
cout<<crr1[i]<<endl;
break;
}
}
}
return 0;
}
颠倒的价牌
最新推荐文章于 2022-04-03 08:07:47 发布