颠倒的价牌(C语言)

题目:
小李的店里专卖其它店中下架的样品电视机,可称为:样品电视专卖店。
其标价都是4位数字(即千元不等)。
小李为了标价清晰、方便,使用了预制的类似数码管的标价签,只要用颜色笔涂数字就可以了。
这种价牌有个特点,对一些数字,倒过来看也是合理的数字。如:1 2 5 6 8 9 0 都可以。这样一来,如果牌子挂倒了,有可能完全变成了另一个价格,比如:1958 倒着挂就是:8561,差了几千元啊!!
当然,多数情况不能倒读,比如,1110 就不能倒过来,因为0不能作为开始数字

有一天,悲剧终于发生了。某个店员不小心把店里的某两个价格牌给挂倒了。并且这两个价格牌的电视机都卖出去了!
庆幸的是价格出入不大,其中一个价牌赔了2百多,另一个价牌却赚了8百多,综合起来,反而多赚了558元。

思路:

  • 枚举所有的价格,当然这个过程要排除不符合要求的解。
  • 倒过来看数字合理的数字有:1, 2, 5, 6, 8, 9, 0。
  • 而数字的值改变的只有:6变为9,9变为6。
#include
using namespace std; 

int reverse(int x){      //原价格的翻转
	int r = 0, b;
	do{
		b = x % 10;
		if(b == 6){
			b = 9;
		}
		else if(b == 9){
			b = 6;
		}
		r = 10*r + b;	
	}while(x /= 10);	
	return r; 
} 

int check(int x){					//检查价格是否可以翻转
	if(x%10 == 0)return 1;   
	do{
		if(x%10 == 3||x%10 == 4||x%10 == 7)return 1;
	}while(x /= 10);
	return 0;
} 

int main(){
	int r1,r2;  //分别代表亏损价格和获益价格的翻转后价格 
	int n1,n2;  //分别代表m1亏损的钱,m2多赚的钱 
	//cout< 200 && n1 < 300){
			for(int y = 1001; y < 10000; y++){
				if(check(y))continue; 
				r2 = reverse(y);
				n2 = r2 - y;
				if(n2 < 900 && n2 > 800){
					if(n2 - n1 == 558){
						cout<

你可能感兴趣的:(数据结构)