题意简单 第一行是 测试数据有几组 然后分别有 几行 第一个数字是 有几个数字 第二个是 需要配出来的数字
下面附上我的代码 --- 我感觉 我这个代码 和其他人的都不一样 , 并且我的代码比较简洁 , 而且测试数据 还有我自己想过的数据 都过了 但是就是提交的时候总是 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 }