一道题_20130316
来源:互联网 发布:系统性能监控软件 编辑:程序博客网 时间:2024/06/05 00:22
开始写写博客,做做笔记,学习学习。
给定等式 A B C D E 其中每个字母代表一个数字,且不同数字对应不
D F G 同字母。编程求出这些数字并且打出这个数字的
+ D F G 算术计算竖式。
──────—
X Y Z D E
这道题据说是C++入门必做的题目,想了半天,想出很多for循环嵌套的方法感觉不靠谱,但还是贴出来吧。
#include <stdio.h>#include <stdlib.h>int main(int argc, char *argv[]){int A, B, C, D, E, F, G, X, Y, Z;for(A = 0; A < 10; A++){for(B = 0; B < 10; B++){if(A == B) continue;for(C = 0; C < 10; C++){if(A == C || B == C) continue;for(D = 0; D < 10; D++){if(A == D || C == D || B == D) continue;for(E = 0; E < 10; E++){if(A == E || B == E || C == E || D == E) continue;for(F = 0; F < 10; F++){if(A == F || B == F || C == F || D == F || E == F) continue;for(G = 0; G < 10; G++){if(A == G || B == G || C == G || D == G || E == G || F == G) continue;for(X = 0; X < 10; X++){if(A == X || B == X || C == X || D == X || E == X || F == X || G == X) continue;for(Y = 0; Y < 10; Y++){if(A == Y || B == Y || C == Y || D == Y || E == Y || F == Y || G == Y || X == Y) continue;for(Z = 0; Z < 10; Z++){if(A == Z || B == Z || C == Z || D == Z || E == Z || F == Z || X == Z || Y == Z) continue;if(A * 10000 + B * 1000 + C * 100 + D * 10 + E + 2 * (D * 100 + F * 10 + G) == X * 10000 + Y * 1000 + Z * 100 + D * 10 + E){printf(" %d%d%d%d%d\r\n", A, B, C, D, E);printf(" %d%d%d\r\n", D, F, G);printf("+ %d%d%d\r\n", D, F, G);printf("————————————————————\r\n");printf(" %d%d%d%d%d\r\n", X, Y, Z, D, E);printf("*************分割线************\r\n");}}}}}}}}}}}system("pause");return 0;}运行结果如下:
后来经过思考,想到了比这个稍微优化了一点,似乎有点换汤不换药的感觉。
#include <stdio.h>#include <stdlib.h>int main(){int A, B, C, D, E, F, G, X, Y, Z;//从题目中可以很轻松地得出F=5, G=0,B=9, X=A+1//如果说我没有根据,不妨自己推断一下F = 5;G = 0;B = 9;int n = 0;for(A = 1; A < 9; A++){for(C = 1; C < 9; C++){if(A == C || B == C) continue;for(D = 1; D < 9; D++){if(A == D || C == D || B == D) continue;for(E = 1; E < 9; E++){if(A == E || B == E || C == E || D == E) continue;for(F = 1; F < 9; F++){if(A == F || B == F || C == F || D == F || E == F) continue;X = A + 1; //由开始的推断得出if(X == B || X == C || X == D || X == E || X == F || X == G) continue;for(Y = 1; Y < 9; Y++){if(A == Y || B == Y || C == Y || D == Y || E == Y || F == Y || G == Y || X == Y) continue;for(Z = 1; Z < 9; Z++){if(A == Z || B == Z || C == Z || D == Z || E == Z || F == Z || X == Z || Y == Z) continue;if(A * 10000 + B * 1000 + C * 100 + D * 10 + E + 2 * (D * 100 + F * 10 + G) == X * 10000 + Y * 1000 + Z * 100 + D * 10 + E){printf(" %d%d%d%d%d\r\n", A, B, C, D, E);printf(" %d%d%d\r\n", D, F, G);printf("+ %d%d%d\r\n", D, F, G);printf("————————————————————\r\n");printf(" %d%d%d%d%d\r\n", X, Y, Z, D, E);printf("*************分割线************\r\n");n++;}}}}}}}}printf("总共有%d个式子\r\n", n);system("pause");return 0;}运行结果如下:
总之这上面的程序都不是我想要的结果,希望可以看到大神们的算法。
- 一道题_20130316
- 一道题
- 一道题
- 一道题
- 一道题
- 一道题
- 一道题
- 一道题
- 一道题
- 一道题
- 一道题
- 一道题
- 一道题
- 一道题
- 一道题
- 一道题
- 一道题
- 一道题
- linux学习入门18——LINUX命令行文本处理工具(linuxcast.net)(grep,sed,diff,tr,cut,wc,sort)
- google的protocol buffer 分析
- Spring bean 通过实现 InitializingBean ,DisposableBean 接口实现初始化方法和销毁前操作
- GPU加速MG整车设计平台汽车碰撞测试高性能计算
- LogFactory.getLog之commons_logging.jar源码分析
- 一道题_20130316
- 也谈谈GalaxyS4:缺乏创新
- Linux下怎样安装卸载各种不同形式的软件
- Linux makefile 入门实例
- 人生不过如此
- 海思hi3515各视频通道间的关系
- 写尽自己一个人的孤独却写不出心里的寂寞
- Hashtable与hashmap 比较
- jqueryMobile 两个页面切换,第二个页面css样式没有加载的问题,已解决