第四屆藍橋杯初賽 C/C++ A組 4. 顛倒的價牌

/*這種價牌有個特點,對一些數字,倒過來看也是合理的數字。如:1 2 5 68 9 0 都可以。這樣一來,如果牌子掛倒了,有可能完全變成了另一個價格,比如:1958 倒着掛就是:8561,差了幾千元啊!!
    當然,多數情況不能倒讀,比如,1110 就不能倒過來,因爲0不能作爲開始數字。
    有一天,悲劇終於發生了。某個店員不小心把店裏的某兩個價格牌給掛倒了。並且這兩個價格牌的電視機都賣出去了!
    慶幸的是價格出入不大,其中一個價牌賠了2百多,另一個價牌卻賺了8百多,綜合起來,反而多賺了558元。


 
 先找出差價在200到300的價格,沒找到一個就再去找差價在800到900的所有價格,兩個差價相減,若結果等於558,則得到所要結果。

*/

#include<iostream.h>
int num[7]={1,2,5,6,8,9,0};
int turn(int n)
{
 if(n==6)return 9;
 if(n==9) return 6;
 return n;
}

void f(int price,int money)
{
 for(int a1=0;a1<6;a1++)
  for(int a2=0;a2<7;a2++)
   for(int a3=0;a3<7;a3++)
    for(int a4=0;a4<6;a4++)
    {
     int fsum1=num[a1]*1000+num[a2]*100+num[a3]*10+num[a4];
                    int fsum2=turn(num[a4])*1000+turn(num[a3])*100+turn(num[a2])*10+turn(num[a1]);
     if((fsum2-fsum1)>800 && (fsum2-fsum1)<900)
     {
      if((fsum2-fsum1)-(price-money)==558)
      cout<<price<<endl;
     }
    }
}

     
int main()
{
 for(int a1=0;a1<6;a1++)
  for(int a2=0;a2<7;a2++)
   for(int a3=0;a3<7;a3++)
    for(int a4=0;a4<6;a4++)
    {
     int sum1=num[a1]*1000+num[a2]*100+num[a3]*10+num[a4];
                    int sum2=turn(num[a4])*1000+turn(num[a3])*100+turn(num[a2])*10+turn(num[a1]);
     if((sum1-sum2)>200 && (sum1-sum2)<300)
     {
      f(sum1,sum2);
     // cout<<sum1<<"-"<<sum2<<"="<<sum1-sum2<<endl;
     }
    }
    return 0;

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章