Fancy Mouse
- -|||
注意没有加减号的情况的处理,别wa了
这里用到一个小技巧,将123456789之间的8个空位设为一个一个digit,然后这8个digit放在一起形成一个3进制的数。这样遍历的时候就设一个int然后从0遍历到3^8就可以了,不用建一个数组然后递归了。
#include<iostream>
using namespace std;

#define OpNo 0 //No operator
#define OpAdd 1 //+
#define OpSub 2 //-
typedef 
int Operator;
long Calc(int Status);
int main()
{
    
long t,count,loop;
    
while(cin>>t)
    
{
        
for(loop=0,count=0;loop<6561;loop++)
            
if(Calc(loop) == t) count++;
        cout
<<count<<endl;
    }

    
return 0;
}

long Calc(int Status)
{
    
long buffer=1,result=0;
    
int currentNum;
    Operator op,elapsedop
=OpNo;
    
for(currentNum=2;currentNum<=9;currentNum++)
    
{
        op
=Status%3;
        Status
/=3;
        
if(OpNo == op)
            buffer
=buffer*10+currentNum;
        
else
        
{
            
if(OpSub == elapsedop)
                result
-=buffer;
            
else
                result
+=buffer;
            buffer
=currentNum;
            elapsedop
=op;
        }

    }

    
if(OpSub == elapsedop) result-=buffer;
    
else result+=buffer;
    
return result;
}
posted on 2005-09-24 12:22  Fancy Mouse  阅读(303)  评论(1编辑  收藏  举报