等式变换,任意数字整合【编程】

来源:互联网 发布:日语翻译公司知乎 编辑:程序博客网 时间:2024/04/28 23:30
修改自
http://blog.csdn.net/keepthinking_/article/details/8521975?reload
等式变换描述:    输入一个正整数X,在下面的等式左边的数字之间添加+号或者-号,使得等式成立。1 2 3 4 5 6 7 8 9 = X比如:12-34+5-67+89 = 51+23+4-5+6-7-8-9 = 5请编写程序,统计满足该输入整数的所有等式的个数。运行时间限制:    无限制内存限制:    无限制输入:    正整数,等式右边的数字输出:    使该等式成立的个数样例输入:    5样例输出:    21
#include <iostream>#include <string>using namespace std;int theendnum = 0;int sumData = 0;int calc(char operateChar,int sum,string number){if(operateChar=='+'){sum+=atoi(number.c_str());//number.delete(0, number.length());}else if(operateChar=='-'){sum-=atoi(number.c_str());//number.delete(0, number.length());}return sum;}void showResult(int result[]){int sum = 0;char operateChar = '+';string source[] = {"1","2","3","4","5","6","7","8","9"};string number,expression;number += source[0];expression += source[0];for (int i=0; i<8; i++){if(result[i]==0){//如果为0,表示数字合并number += (source[i+1]);expression+= (source[i+1]);}else if(result[i]==1){sum=calc(operateChar,sum,number);number.clear();operateChar='+';number += (source[i+1]);expression +=  ("+");expression +=(source[i+1]);}else if(result[i]==2){sum=calc(operateChar,sum,number);number.clear();operateChar='-';number += (source[i+1]);expression +=  ("-");expression +=(source[i+1]);}}sum=calc(operateChar,sum,number);if(sum==theendnum){sumData++;}}void getResult(int index, int result[]){if(index==8){showResult(result);return;}for(int i=0;i<3;i++){result[index]=i;getResult(index+1,result);result[index]=0; //恢复原来的状态}}int main(){int result[8] = {0};cin>>theendnum;getResult(0, result);cout<<sumData<<endl;return 0;}




http://blog.csdn.net/keepthinking_/article/details/8521975?reload

原创粉丝点击