码迷,mamicode.com
首页 > 编程语言 > 详细

1.3 枚举(穷举)算法

时间:2016-07-09 16:18:45      阅读:220      评论:0      收藏:0      [点我收藏+]

标签:

1 填数字问题

 1 #include <stdio.h>
 2 int main()
 3 {
 4     int i1,i2,i3,i4,i5;
 5     long multi,result;
 6     for(i1=1;i1<=9;i1++)
 7     {
 8         for(i2=0;i2<=9;i2++)
 9         {
10             for(i3=0;i3<=9;i3++)
11             {
12                 for(i4=0;i4<=9;i4++)
13                 {
14                     for(i5=0;i5<=9;i5++)
15                     {
16                          multi=i1*10000+i2*1000+i3*100+i4*10+i5;
17                          result=i5*100000+i5*10000+i5*1000+i5*100+i5*10+i5;
18                          if(multi*i1==result)
19                          {
20                              printf("\n%5d%2d%2d%2d%2d\n",i1,i2,i3,i4,i5);
21                              printf("X%12d\n",i1);
22                              printf("______________\n");
23                              printf("%3d%2d%2d%2d%2d%2d\n",i5,i5,i5,i5,i5,i5); 
24                          }
25                     }
26                 }
27             }
28         }
29     }    
30     getch();
31     return 0;
32 }

2 填符号问题

 1 #include <stdio.h>
 2 int main()
 3 {
 4     int j,i[5]; //循环变量 ,数组i用来表示4个运算符 
 5     int sign;//累加运算时的符号   
 6     int result; //保存运算式的结果值 
 7     int count=0; //计数器,统计符合条件的方案 
 8     int num[6];  //保存操作数 
 9     float left,right; //保存中间结果 
10     char oper[5]={ ,+,-,*,/}; //运算符 
11     printf("请输入5个数:");
12     for(j=1;j<=5;j++)
13         scanf("%d",&num[j]);
14     printf("请输入结果:");
15     scanf("%d",&result);
16     for(i[1]=1;i[1]<=4;i[1]++)//循环4种运算符,1表示+,2表示-,3表示*,4表示/
17     {
18         if((i[1]<4) || (num[2]!=0))//运算符若是/,则第二个运算数不能为0
19         {
20             for(i[2]=1;i[2]<=4;i[2]++)
21             {
22                 if((i[2]<4) || (num[3]!=0))
23                 {
24                     for(i[3]=1;i[3]<=4;i[3]++)
25                     {
26                         if((i[3]<4) || num[4]!=0)
27                         {
28                             for(i[4]=1;i[4]<=4;i[4]++)
29                             {
30                                 if((i[4]<4) || (num[5]!=0))
31                                 {
32                                     left=0;
33                                     right=num[1];
34                                     sign=1;
35                                     for(j=1;j<=4;j++)
36                                     {
37                                         switch(oper[i[j]])
38                                         {
39                                             case +: 
40                                                  left=left+sign*right;
41                                                  sign=1;
42                                                  right=num[j+1];
43                                                  break;
44                                             case -: 
45                                                  left=left+sign*right;
46                                                  sign=-1;
47                                                  right=num[j+1];
48                                                  break;//通过f=-1实现减法
49                                             case *: 
50                                                  right=right*num[j+1];
51                                                  break;//实现乘法
52                                             case /: 
53                                                  right=right/num[j+1];//实现除法
54                                                  break;
55                                         }
56                                     }
57                                     if(left+sign*right==result)
58                                     {
59                                         count++;
60                                         printf("%3d:",count);
61                                         for(j=1;j<=4;j++)
62                                             printf("%d%c",num[j],oper[i[j]]);
63                                         printf("%d=%d\n",num[5],result);
64                                     } 
65                                 }
66                             }
67                         }
68                     }
69                 }
70             }
71         }
72     }
73     if(count==0)
74         printf("没有符合要求的方法!\n");
75     getch();
76     return 0;
77 }

 

1.3 枚举(穷举)算法

标签:

原文地址:http://www.cnblogs.com/wozixiaoyao/p/5655965.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!