24Pointgame-----24点游戏

题意简单     第一行是  测试数据有几组   然后分别有  几行  第一个数字是  有几个数字  第二个是 需要配出来的数字    

下面附上我的代码   ---   我感觉 我这个代码 和其他人的都不一样 , 并且我的代码比较简洁 , 而且测试数据  还有我自己想过的数据 都过了  但是就是提交的时候总是  wrong    why ?  这是天将降大任于斯人也 么? 

那也不用每一道题都这样坑我吧 ? 努力发现问题  !!!!

 1 /*      坚持一下 可以找到bug  的      */
 2 #include<stdio.h>
 3 #include<math.h>
 4 #include<string.h>
 5 int n,n1,visited[7];
 6 double a[7],target,zero=0.000001;
 7 bool DFS(double sum)
 8 {
 9     if(n1==n)
10     {
11         if(fabs(sum-target)<zero)
12             return true;
13         else
14             return false;
15     }
16     for(int i=1;i<n;i++)                     //  这里出了错误        i 应该是从0 开始  后来修改代码的时候 没有注意到这一点   
17     {
18         if(!visited[i])
19         {
20             visited[i]=1;
21             n1++;
22             if(DFS(sum+a[i]))
23                 return true;
24             if(DFS(sum*a[i]))
25                 return true;
26             if(DFS(sum-a[i]))
27                 return true;
28             if(DFS(sum/a[i]))
29                 return true;
30             if(DFS(a[i]-sum))
31                 return true;
32             if(DFS(a[i]/sum))
33                 return true;
34             visited[i]=0;
35             n1--;
36         }
37     }
38     return false;
39 }
40 int main()
41 {
42     int t,i,mark;
43     scanf("%d",&t);
44     while(t--)
45     {
46         scanf("%d%lf",&n,&target);
47         for(i=0;i<n;i++)
48             scanf("%lf",&a[i]);
49         memset(visited,0,sizeof(visited));
50         for(mark=1,i=0;i<n;i++)
51         {
52             n1=1;
53             visited[i]=1;
54             if(DFS(a[i]))
55             {
56                 mark=0;
57                 break;
58             }
59             visited[i]=0;
60         }
61         if(!mark)
62             printf("Yes
");
63         else
64             printf("No
");
65     }
66     return 0;
67 }

实在是找不到 错误之处   , 先放在这 清醒一段时间之后 开始  再试试

今天早上 来了之后  一遍 就   A   了     反映的问题  是   之前 修改代码   没有   修改深度搜索中   的  i  值    做题的时候 事先在纸上 理清思路然后再开始 敲代码省时又省力!

下面附上正确的代码

 1 #include<stdio.h>
 2 #include<string.h>
 3 #include<math.h>
 4 int n,target,visited[7],m;
 5 double  a[7],zero=1e-6;
 6 bool DFS(double sum)
 7 {
 8     if(m==n&&fabs(sum-target)<zero)
 9         return true;
10     for(int i=0;i<n;i++)
11     {
12         if(!visited[i])
13         {
14             m++;
15             visited[i]=1;
16             if(DFS(sum+a[i])) return true;
17             if(DFS(sum*a[i])) return true;
18             if(DFS(sum-a[i])) return true;
19             if(DFS(sum/a[i])) return true;
20             if(DFS(a[i]/sum)) return true;
21             if(DFS(a[i]-sum)) return true;
22             visited[i]=0;
23             m--;
24         }
25     }
26     return false;
27 }
28 int main()
29 {
30     int t;
31     scanf("%d",&t);
32     while(t--)
33     {
34         scanf("%d%d",&n,&target);
35         for(int i=0;i<n;i++)
36             scanf("%lf",&a[i]);
37         int i,mark;
38         for(mark=i=0;i<n;i++)
39         {
40             m=1;
41             memset(visited,0,sizeof(visited));
42             visited[i]=1;
43             if(DFS(a[i]))
44             {
45                 mark=1;
46                 break;
47             }
48         }
49         if(mark)
50             printf("Yes
");
51         else
52             printf("No
");
53     }
54     return 0;
55 }
原文地址:https://www.cnblogs.com/A-FM/p/5289535.html