NO IMAGE

題目:

寫一個程式要求當輸入在整數範圍內的一個整數R後, 計算機便會檢查,在下式□處能否填上“+”、“-”或“×”號湊成相應等式。如能湊成,則印出所有這些等式的個數。注意,考慮符號的優先順序。 1□2□3□4□5□6□7□8□9=R

Input

只有一行,就是一個整數R。

Output

只有一行,就是使等式成立的個數。

Sample Input

20

Sample Output

30

解題思路:

    遍歷每一個位置可以放的符號的所有情況,計算表示式的值,如果和R相同就計數。

程式碼:

#include <iostream>

using namespace std;

int r;
int fu[10];
int num[10];
int answ;

bool check(){
    int ans=0;
    for(int i=1;i<=9;i ){
        if(!fu[i]){
            int beg=i-1;
            while(!fu[i]){
                num[i-1]=0;
                num[i]=0;
                i ;
                if(i>9)break;
            }
            int cur=1;
            for(int j=beg;j<=i-1;j )cur=cur*j;
            ans=ans cur*fu[beg];
        }
    }
    for(int i=1;i<=9;i ){
        if(num[i])ans=ans num[i]*fu[i];
    }
    for(int i=1;i<=9;i )num[i]=i;
    if(ans==r)return true;
    else return false;
}

void f(int a,int x){    
    fu[a]=x;
    if(a==9){
        if(check())answ ;
    }else{        
        f(a 1,1);
        f(a 1,0);
        f(a 1,-1);
    }
}

int main(){    
    while(scanf(“%d”,&r)!=0){
        for(int i=1;i<10;i )num[i]=i;
        answ=0;
        f(1,1);
        cout<<answ<<endl; 
    }
    return 0;