小李的店里专卖其它店中下架的样品电视机,可称为:样品电视专卖店。其标价都是4位数字(即千元不等)。小李为了标价清晰、方便,使用了预制的类似数码管的标价签,只要用颜色笔涂数字就可以了。
有一天,悲剧终于发生了。某个店员不小心把店里的某两个价格牌给挂倒了。并且这两个价格牌的电视机都卖出去了!
庆幸的是价格出入不大,其中一个价牌赔了2百多,另一个价牌却赚了8百多,综合起来,反而多赚了558元。
解法2:
有一天,悲剧终于发生了。某个店员不小心把店里的某两个价格牌给挂倒了。并且这两个价格牌的电视机都卖出去了!
庆幸的是价格出入不大,其中一个价牌赔了2百多,另一个价牌却赚了8百多,综合起来,反而多赚了558元。
请根据这些信息计算:赔钱的那个价牌正确的价格应该是多少?
解法1:
使用暴力搜索每位数字,进行相应的判断;使用四个变量表示每一位数字,将可能反转的数字放置于数组中进行下标循环暴力出结果。
#include<stdio.h>
int x[7]={1,2,5,6,8,9,0};
int stamon1,stamon2;
int change(int a){
if(a==9){
return 6;
} else if(a==6){
return 9;
}
return a;
}
void money1(int temp){
int a,b,c,d;
int a1,b1,c1,d1;
int lasmon=0;
for(a=0;a<6;a++){
for(b=0;b<7;b++){
for(c=0;c<7;c++){
for(d=0;d<6;d++){
stamon1=x[a]*1000+x[b]*100+x[c]*10+x[d];
a1=change(x[a]);
b1=change(x[b]);
c1=change(x[c]);
d1=change(x[d]);
lasmon=d1*1000+c1*100+b1*10+a1;
if(((lasmon-stamon1)>800) &&((lasmon-stamon1)<900)){
if(((lasmon-stamon1)-temp)==558){
printf("赔钱:%d\n",stamon2);
return ;
}
}
}
}
}
}
}
int main(){
int a,b,c,d;
int a1,b1,c1,d1;
int lasmon=0;
int temp;
for(a=0;a<6;a++){
for(b=0;b<7;b++){
for(c=0;c<7;c++){
for(d=0;d<6;d++){
stamon2=x[a]*1000+x[b]*100+x[c]*10+x[d];
a1=change(x[a]);
b1=change(x[b]);
c1=change(x[c]);
d1=change(x[d]);
lasmon=d1*1000+c1*100+b1*10+a1;
temp=stamon2-lasmon;
if((temp>200) &&(temp<300)){
money1(stamon2-lasmon);
}
}
}
}
}
return 0;
}
解法2:
还是使用暴力搜索,但是不是将其进行每一位进行暴力,而是整个当作四位数进行暴力。然后进行相应判断。
#include <stdio.h>
#include<string.h>
int change(int x)
{
int a[4];
int y=0;
memset(a,0,sizeof(a));
int i=0;
while(x){
a[i++]=x%10;
x=x/10;
}
for(i=0;i<4;i++){
if(a[i]==3 || a[i]==4 || a[i]==7)
return 0;
else if(a[i]==6){
a[i]=9;
y=y*10+a[i];
}else if(a[i]==9){
a[i]=6;
y=y*10+a[i];
}else
y=y*10+a[i];
}
return y;
}
int main()
{
int be1,be2;
int end1,end2;
int dis1,dis2;
for(be1=1001;be1<9999;be1++){
end1 = change(be1);
dis1= be1-end1;
if(dis1>200 && dis1<300){
for(be2=1001;be2<9999;be2++){
end2=change(be2);
dis2=end2-be2;
if(dis2>800 && dis2<900){
if(dis2-dis1==558){
printf("%d\n",be1);
break;
}
}
}
}
}
return 0;
}