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