- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C++编程趣题:给1~9中间填符号
这是一个挺经典也有点难度的C/C++编程题:?
?
在1 2 3 4 5 6 7 8 9九个数字中插入“+”或“-”符号使得结果为100,编程实现所有的组合。
注:数字的顺序不能改变。
如: 123 - 45 - 67 + 89 = 100
????? 12 - 3 -4 + 5 - 6 + 7 + 89 = 100
??????
??????小豆子无意中看到,兴趣浓浓。网上流传的答案版本就是用九个for循环遍历。这显然不是一个好的方案,如果不是九个数,而是九十个数,就得扩展到九十个for循环,优化空间太小。小豆子经过两天的思索,想到了一个解决方法。自己认为要比现有的方法巧妙,而且没有用到很高深的C知识,比较易懂。现给出程序如下,已经过调试,可直接运行(该方法的具体思路见末尾)。如果有缘人也在做这个程序,欢迎和小豆子切磋!
#include stdio.h#include iostream.h#include memory.h
#define NUM 6561?? //3^8:6561
int mici(int x, int i)//求解x^i{?int res = 1;?for (; i0; i--)?{??????? res *= x;?}?return (res);}
int main(int argc, char *argv[]){?int data[9];?int index, level;?int i, j, k=0;?int pre_sign;?int temp = 0;?int sum = 0;?int x = 2;
?for (i=0; iNUM; i++)//总共有6561种可能?{??memset(data, 0, sizeof(int)*9);//清零??index = i;??for (level=9; level1; level--)//有8处符号需要判断??{???pre_sign = index%3; //该空的符号,规定0:+,1:-;2:连接???index = index/3;//往上一层(即上一个空)的位置???switch(pre_sign)????{???case 0:?????? if (temp == 0)?????? {?????data[k] = level;?????? }????else????{?????data[k] = temp;?????temp = 0;?????x = 2;????}????????????????????k++;????break;???case 1:?????? if (temp == 0)?????? {?????data[k] = 0 - level;?????? }????else????{?????data[k] = 0 - temp;?????temp = 0;?????x = 2;????}????????????????????k++;????break;???case 2:?????if (temp == 0)????{?????temp = level + (level-1)*10;????}????else????{??????????????????? temp = temp + (level-1)*mici(10,x);?????x++;????}????break;???default:????break;???}??}
??if (pre_sign == 2)//处理数字1??{???data[k] = temp;??}??else??{???data[k] = 1;??}??k = 0;? //将这些变量复位很重要,以免影响下一轮!??temp = 0;??x = 2;????for (j=0; data[j]!=0; j++)//求和??{???sum = sum + data[j];??}
??if (sum == 100)??{???for (j=j-1; j=0; j--)//逆序输出,这样1在前面???{????if (data[j] 0)????{????? ??cout+data[j];????}????else????{?????coutdata[j];????}???}???cout = sum/*.....i*/endl; //i for test??}??sum = 0;?}?return(0);}
/*------------------------
您可能关注的文档
最近下载
- 《SPSS实战与统计思维》读书笔记.pptx VIP
- 2025年新疆投资发展(集团)有限责任公司及所属公司公开招聘(42人)笔试备考试题及答案解析.docx VIP
- 《应急救援技能培训》课件.ppt VIP
- 临床技术操作规范-妇产科(11版).doc
- ISO 14001 2015 中英文.doc VIP
- 2025辽宁省交通建设投资集团有限责任公司招聘16人笔试历年参考题库附带答案详解.docx
- 2025年水平定向钻市场调查报告.docx
- 美国发展历程.ppt VIP
- 【农业农村部】中国农业展望报告(2025—2034).docx
- DB34_T4098.2-2022_建筑固废再生作道路材料应用技术规程第2部分:路基工程_安徽省.docx VIP
文档评论(0)