`
SunnyYoona
  • 浏览: 365609 次
社区版块
存档分类
最新评论

[华为机试真题][2014]63.等式变换

 
阅读更多

题目

输入一个正整数X,在下面的等式左边的数字之间添加+号或者-号,使得等式成立。

1 2 3 4 5 6 7 8 9 = X

比如:

12-34+5-67+89 = 5

1+23+4-5+6-7-8-9 = 5

请编写程序,统计满足输入整数的所有整数个数。

输入:       正整数,等式右边的数字

输出:       使该等式成立的个数

样例输入:5

样例输出:21

代码

/*---------------------------------------
*   日期:2015-07-06
*   作者:SJF0115
*   题目:等式变换
*   来源:华为机试真题
-----------------------------------------*/
#include <iostream>
#include <string>
#include <vector>
#include <stack>
#include <algorithm>
using namespace std;

// 整型转换为字符串
string Int2Str(int num){
    string str;
    if(num == 0){
        str = '0';
        return str;
    }//if
    int tmp = num;
    while(num){
        str.insert(str.begin(),num % 10 + '0');
        num /= 10;
    }//while
    return str;
}

/* 
当前计算值              result 
符合的等式个数          count 
等式结果                x
相邻数合并的结果        sequence    1 + 2 + 345  345 就是 sequence 
*/   
void helper(vector<int> &num,int index,int x,int result,int sequence,int &count,string op){
    if(index == num.size()){
        if(result + sequence == x || result - sequence == x){
            ++count;
            if(result + sequence == x){
                op += "+"+Int2Str(sequence);
            }//if
            else{
                op += "-"+Int2Str(sequence);
            }//else
            cout<<op<<endl;
        }//if
        return;
    }//if
    // 连续数
    helper(num,index+1,x,result,sequence * 10 + num[index],count,op);

    // 加法 +
    if(op.size() > 0){
        // 以num[index]为sequence的起点
        helper(num,index+1,x,result + sequence,num[index],count,op+"+"+Int2Str(sequence));
    }//if
    else{
        // 以num[index]为sequence的起点
        helper(num,index+1,x,result + sequence,num[index],count,op+Int2Str(sequence));
    }//else


    if(op.size() > 0){
        // 减法-
        // 以num[index]为sequence的起点
        helper(num,index+1,x,result - sequence,num[index],count,op+"-"+Int2Str(sequence));
    }//if
}

int TransformationEquation(vector<int> num,int x){
    int count = 0;
    string op = "";
    helper(num,1,x,0,num[0],count,op);
    return count;
}

int main(){
    int n,x;
    int num;
    //freopen("C:\\Users\\Administrator\\Desktop\\acm.in","r",stdin);
    while(cin>>n>>x){
        vector<int> vec;
        for(int i = 0;i < n;++i){
            cin>>num;
            vec.push_back(num);
        }//for
        cout<<TransformationEquation(vec,x)<<endl;
    }//while
    return 0;
}
<script type="text/javascript"> $(function () { $('pre.prettyprint code').each(function () { var lines = $(this).text().split('\n').length; var $numbering = $('<ul/>').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($('<li/>').text(i)); }; $numbering.fadeIn(1700); }); }); </script>
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics