如题:
X
小李的店里专卖其它店中下架的样品电视机,可称为:样品电视专卖店。
其标价都是4位数字(即千元不等)。
小李为了标价清晰、方便,使用了预制的类似数码管的标价签,只要用颜色笔涂数字就可以了(参见p1.jpg)。
这种价牌有个特点,对一些数字,倒过来看也是合理的数字。如:1 2 5 6 8 9 0 都可以。这样一来,如果牌子挂倒了,有可能完全变成了另一个价格,比如:1958 倒着挂就是:8561,差了几千元啊!!
当然,多数情况不能倒读,比如,1110 就不能倒过来,因为0不能作为开始数字。
有一天,悲剧终于发生了。某个店员不小心把店里的某两个价格牌给挂倒了。并且这两个价格牌的电视机都卖出去了!
庆幸的是价格出入不大,其中一个价牌赔了2百多,另一个价牌却赚了8百多,综合起来,反而多赚了558元。
请根据这些信息计算:赔钱的那个价牌正确的价格应该是多少?
上边那个汉字排版不知道怎么弄看着舒服,哎。
1.首先,我们想,你要是知道翻转过来之后是啥的话,那你得弄个函数吧,不然看着可不舒服,然后,就有了下面的overturn;
2.然后你要给他从1000到10000遍历一遍,看看哪个数的差是200多块钱或者八百多块钱的。。。
3.在翻转的时候,你会发现,最后一个数是0,⑧行,数里有3.4.7这三个数的⑧行。因为他们翻转过来不是数
4.在反转每个数的时候,我懒,于是有了change这个函数,在反转的时候,除了6.9是对翻,其他都不变。
5.返回数是A1000+B100+C10+D!!!!我写成了D1000+C100+B10+A;我说错在哪里我找不到!纠错接近一小时
6.之后的都很简单了,代码里介绍应该很清楚(自我感觉良好,小声bb)
#include <stdio.h>
int overturn(int x);//这是求出翻转过来的数是啥?
int change(int y);//这是在求每个数,翻转过来之后是啥?
int main()
{
int first,end,x=0,y=0;//首数和翻数
int m1[100],m2[100],n1[100],n2[100];//赚或赔
for(first=1000;first<10000;first++)//遍历
{
end = overturn(first);
if(first - end>200&&first - end<300)//这就是赔的
{
m1[x] = first;
m2[x] = end;//把数记录下来,对比的时候好找出原数
x++;
}
if(end - first>800&&end - first<900)//这是赚的
{
n1[y] = end;
n2[y] = first;
y++;//把数记录下来,对比的时候好找出原数
}
}
int i,j;
for (i = 0;i<x;i++)
{
for(j = 0;j<y;j++)
{
if(((n1[j]-n2[j]) - (m1[i]-m2[i])) == 558)//这就到了,最最最最最重要的时候了 ,i和j顺序可不能错(指的是数组里)
{
printf("%d\n",m1[i]);//ps:谁知道咋来的五个数!
}
}
}
}
int overturn(int x)
{
int a,b,c,d;
int A,B,C,D,end;
a = x%10;
b = x/10%10;
c = x/100%10;
d = x/1000%10;
if(a==0||a==3||b==3||c==3||d==3||a==4||b==4||c==4||d==4||a==7||b==7||c==7||d==7)//自己动笔,丰衣足食!
{
return -1;//当你动笔画了之后。你会发现3,4,7这三个数翻转过来不是数!而且,最后的那个数不能为0是必须的。
}
A = change(a);//我懒,又弄了个函数,,,,
B = change(b);
C = change(c);
D = change(d);
end = A*1000+B*100+C*10+D;//啊,我开始给弄得数是D*1000+C*100+B*10+A;然后还错了,我使劲找,找不到错误,花了半个多小时才纠错成功!
return end;
}
int change(int y)
{
if(y==9) return 6;
if(y==6) return 9;
return y;//只有6和9翻转之后会变化,其他不变
}
答案在最后,是9088
ps:刚刚的代码运行图片传错了