- 论坛徽章:
- 780
|
本帖最后由 Herowinter 于 2013-12-25 16:58 编辑
本人文盲,以下代码来自google搜索,
本人完全不理解其中的任何含义,
本人对此可能引发的任何不良后果不负任何责任。- #include <stdio.h>
- int main()
- {
- char op,str[80];
- int i,j,s,n,m,ptr;
- for (i=0;i<=6561;i++) /*i是每一种枚举的情况,把i分解为八位3进制数,每一位表示每一个位置的符号*/
- {
- s=0; /*该方式下的和*/
- m=1; /*作操作数*/
- n=i; /*获取i在3进制下的每一位会破坏i,所以借用变量n来获取*/
- op='+'; /*第一次操作方式为+*/
- ptr=0; /*指针用来记录运算过程*/
- str[ptr++]='1'; /*首先记录一个1*/
- for (j=2;j<=9;j++) /*八次循环,每次的下一个操作数是j*/
- {
- if (n%3) /*3进制下的第j-1位数,如果不是0,则要完成先前的操作*/
- {
- if (op=='+') s+=m; else s-=m;m=j;
- }
- switch(n%3) /*根据这一位的情况进行处理*/
- {
- case 0:m=m*10+j;break;
- case 1:op='+';break;
- case 2:op='-';break;
- }
- if (n%3) str[ptr++]=op; /*记录运算模式*/
- str[ptr++]='0'+j;
- n/=3;
- }
-
- if (op=='+') s+=m;
- else s-=m;
- str[ptr]='\0';
- if (s==100) printf("Found: %s=%d\n",str,s); /*判断是否满足*/
- }
- return 0;
- }
- Found: 123-45-67+89=100
- Found: 12-3-4+5-6+7+89=100
- Found: 12+3+4+5-6-7+89=100
- Found: 123+4-5+67-89=100
- Found: 1+2+3-4+5+6+78+9=100
- Found: 12+3-4+5+67+8+9=100
- Found: 1+23-4+56+7+8+9=100
- Found: 1+2+34-5+67-8+9=100
- Found: 1+23-4+5+6+78-9=100
- Found: 123+45-67+8-9=100
- Found: 123-4-5-6-7+8-9=100
复制代码 |
|