输入一个正整数X,在下面的等式1 2 3 4 5 6 7 8 9 = X,左边的数字之间添加+号或者-号,使得等式成立。
来源:互联网 发布:yield java释放锁 编辑:程序博客网 时间:2024/05/22 18:11
#include <iostream>#include <assert.h>#include <string.h>using namespace std;/*等式变换描述: 输入一个正整数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 请编写程序,统计满足该输入整数的所有等式的个数。*/int StrToInt(char *pStart,char *pEnd)//将区间[pStart,pEnd]的字符转换为整数{assert(NULL!=pStart && NULL!=pEnd);int result = 0;while (pStart<=pEnd){result = result*10 + *pStart - '0';++pStart;}return result;}void OutPrint(int x,int lenth,int *pResult,int *pSymbol_array,int symbol_array_len){int i,j;for (i=0;i<symbol_array_len;++i){cout<<x<<" = ";for (j=0;j<lenth-1;++j){if (1&(pSymbol_array[i]>>j))cout<<pResult[j]<<"+";elsecout<<pResult[j]<<"-";}cout<<pResult[j]<<endl;}}bool IsEq(int x,int lenth,int *pResult,int *pSymbol_array,int *symbol_array_len){bool flag = false;*symbol_array_len = 0;int k = 1<<(lenth-1);int sum = pResult[0];for (int i=0;i<k;++i){sum = pResult[0];for (int j=0;j<lenth-1;++j){if (1&(i>>j))sum+=pResult[j+1];elsesum-=pResult[j+1];}if(sum == x){flag = true;pSymbol_array[(*symbol_array_len)++] = i;}}if(flag)return true;elsereturn false;}void EqTransform(int x,char *pStart,int *cnt){static int results[9] = {0};static int index = 0;char *pTemp = pStart;static int *pSymbol_array = new int[1<<8];int symbol_array_len = 0;if (*pTemp == '\0' || *pStart == '\0'){if (IsEq(x,index,results,pSymbol_array,&symbol_array_len)){(*cnt)+=symbol_array_len; OutPrint(x,index,results,pSymbol_array,symbol_array_len);}return;}while (*pTemp!='\0'){results[index++] = StrToInt(pStart,pTemp);EqTransform(x,pTemp+1,cnt);--index;++pTemp;}}int main(int argc,char **argv){char *pStr = "123456789";int cnt = 0;EqTransform(5,pStr,&cnt);cout<<"共"<<cnt<<"种"<<endl;system("pause");return 0;}
0 0
- 第三题:等式变换 输入一个正整数X,在下面的等式左边的数字之间添加+号或者-号,使得等式成立。 1 2 3 4 5 6 7 8 9 = X
- 输入一个正整数X,在下面的等式1 2 3 4 5 6 7 8 9 = X,左边的数字之间添加+号或者-号,使得等式成立。
- 随笔:1 2 3 4 5 6 7 8 9 =110 在左边数字之间加入运算符(+、-或不加),使得等式成立
- 1 2 3 4 5 6 7 8 9 =110 在左边数字之间加入运算符(+、-或不加),使得等式成立
- 【华为机试题】请在123456789之间添加+号或者-号,也可以什么都不填,使得等式的运算结果等于a。要求程序输出等式成立的个数b。测试用例:a=5时,b=21。
- 完成等式:1 2 3 4 5 6 7 8 9=X
- 1 2 3 4 5 6 7 8 9 = 110,在数字间填入加号或者减号(可以不填,但不能填入其它符号)使等式成立。
- 【ProjectEuler】ProjectEuler_052(找出最小的正整数x,使得2x, 3x, 4x, 5x和6x都包含同样的数字)
- 整型数组处理算法(八)插入(+、-、空格)完成的等式:1 2 3 4 5 6 7 8 9=N[华为面试题]
- 整型数组处理算法(八)插入(+、-、空格)完成的等式:1 2 3 4 5 6 7 8 9=N[华为面试题]
- 整型数组处理算法(八)插入(+、-、空格)完成的等式:1 2 3 4 5 6 7 8 9=N[华为面试题]
- 在表达式“123456789=100”左边的适当位置插入运算符“+”、“-”,如何使等式成立?
- 123456789=100,表达式左边使用任意多个+号与-号,使等式成立
- 输入正整数k,找到所有的正整数x>=y,使得1/k=1/x + 1/y; 样例输入: 2 12 样例输出: 2 1/2 = 1/6 + 1/3 1/
- 输入正整数 k,找到所有的正整数 x ≥ y,使得 1/k =1/x + 1/y
- 插入(+、-、空格)完成的等式:1 2 3 4 5 6 7 8 9=N
- 企业面试题:一个三个数的式子,移动其中一根火柴,使等式成立,用程序或实现(可以用伪码),输出能成立的等式。
- uva 10317 调整等式中数字的位置使等式成立
- 使用GDBopenFileDialog打开数据并显示
- jquery操作复选框(checkbox)的小技巧总结
- ARM tutorial 1
- [Java TCP/IP Socket] — 单播、广播、组播(一.原理)
- 批处理文件
- 输入一个正整数X,在下面的等式1 2 3 4 5 6 7 8 9 = X,左边的数字之间添加+号或者-号,使得等式成立。
- 查找显示图片的两行方法
- ORA-24247: 网络访问被访问控制列表 (ACL) 拒绝
- NMath .NET数学与科学算法库控件下载及介绍
- 浅谈协方差矩阵
- 黄渊普:媒体视角--O2O与传统零售
- Python机器学习库
- KUKA Educational Framework
- Delegate、Predicate、Action和Func