0%

颠倒的价牌

Description

小李的店里专卖其它店中下架的样品电视机,可称为:样品电视专卖店。
其标价都是4位数字(即千元不等)。
小李为了标价清晰、方便,使用了预制的类似数码管的标价签,只要用颜色笔涂数字就可以了(参见图片)。

在这里插入图片描述
这种价牌有个特点,对一些数字,倒过来看也是合理的数字。如:1 2 5 6 8 9 0 都可以。这样一来,如果牌子挂倒了,有可能完全变成了另一个价格,比如:1958 倒着挂就是:8561,差了几千元啊!!
当然,多数情况不能倒读,比如,1110 就不能倒过来,因为0不能作为开始数字。
有一天,悲剧终于发生了。某个店员不小心把店里的某两个价格牌给挂倒了。并且这两个价格牌的电视机都卖出去了!
庆幸的是价格出入不大,其中一个价牌赔了2百多,另一个价牌却赚了8百多,综合起来,反而多赚了558元。

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

Input
None

Output
一个4位数字

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#include <stdio.h>
#include <math.h>
int main()
{
int Na, Nb;
int num = 0;
for (int i = 9999; i >= 1000; i--)//倒立后的价格
for (int j = 1025; j <= 9999; j++)
{
int m = i, n = j;
int a[4], b[4];
for ( int q = 0; q < 4; q++ ) // 真正价格 倒序存入数组
{
int cheakA= m % 10;
int cheakB= n % 10;

/* 6 9 对换 !!! */
if ( cheakA == 6 )
cheakA = 9;
else if ( cheakA == 9 )
cheakA = 6;
if ( cheakB == 6 )
cheakB = 9;
else if ( cheakB == 9 )
cheakB = 6;

a[q] = cheakA;
b[q] = cheakB;

m = m / 10;
n = n / 10;
}


if (a[0] != 0 && a[0] != 3 && a[0] != 4 && a[0] != 7 && b[0] != 0 && b[0] != 3 && b[0] != 4 && b[0] != 7)
if (a[3] != 0 && a[3] != 3 && a[3] != 4 && a[3] != 7 && b[3] != 0 && b[3] != 3 && b[3] != 4 && b[3] != 7)
if (b[1] != 3 && b[1] != 4 && b[1] != 7 && b[2] != 3 && b[2] != 4 && b[2] != 7)
if (a[1] != 3 && a[1] != 4 && a[1] != 7 && a[2] != 3 && a[2] != 4 && a[2] != 7)
{
Na = 0; Nb = 0;
for (int w = 0; w < 4; w++) //倒序前的价格
{//几个数字转化为一个数
Na= Na * 10 + a[w];
Nb= Nb * 10 + b[w];
}

if ((i - Na) > 800 && (Nb - j) > 200 && (i - Na) < 900 && (Nb - j) < 300)
{
if ( (i - Na) - (Nb - j) == 558 )
{
num++;
printf( "倒立后:%d赚钱真实价钱:%d\n", i, Na );
printf( "倒立后:%d赔钱真实价钱:%d\n", j, Nb );
printf( "\n" );
}
}
}
}
printf( "%d", num );
return(0);
}

百度了一下,还有用两种数组来做的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include<stdio.h>   
#include<math.h>

int main(){
int num1[7]={0,1,2,5,6,8,9},num2[7]={0,1,2,5,9,8,6};//因为6要变成9,9要变成6,所以定义两个数组,6 9位置颠倒
int a,b,c,d,i,j,k,m;
int p1,p3,diff1,p2,diff2;//p1,p3表示赔二百的,p2表示挣八百的
for(a=1;a<7;a++){
for(b=0;b<7;b++){
for(c=0;c<7;c++){
for(d=1;d<7;d++){
p1=num1[a]*1000+num1[b]*100+num1[c]*10+num1[d];
p3=num2[d]*1000+num2[c]*100+num2[b]*10+num2[a];
diff1=fabs(p1-p3);
if(diff1>200&&diff1<300){
for(i=1;i<7;i++){
for(j=0;j<7;j++){
for(k=0;k<7;k++){
for(m=1;m<7;m++){
p2=num1[i]*1000+num1[j]*100+num1[k]*10+num1[m];
diff2=fabs(p2-(num2[m]*1000+num2[k]*100+num2[j]*10+num2[i]));
if(diff2>800&&diff2<900&&fabs(diff1-diff2)==558){
if(p1<p3){
printf("%5d",p3);
return 0;
}else{
printf("%5d",p1);
return 0;
}

}
}
}
}
}
}
}
}
}
}
return 0;
}

莫的感情的搬运机器QAQ

-------------本文结束感谢您的阅读-------------

欢迎关注我的其它发布渠道