您的位置:首页 > 其它

24Pointgame-----24点游戏

2016-03-17 21:32 453 查看


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

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

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

/*      坚持一下 可以找到bug  的      */
#include<stdio.h>
#include<math.h>
#include<string.h>
int n,n1,visited[7];
double a[7],target,zero=0.000001;
bool DFS(double sum)
{
if(n1==n)
{
if(fabs(sum-target)<zero)
return true;
else
return false;
}
for(int i=1;i<n;i++)                     //  这里出了错误        i 应该是从0 开始  后来修改代码的时候 没有注意到这一点
{
if(!visited[i])
{
visited[i]=1;
n1++;
if(DFS(sum+a[i]))
return true;
if(DFS(sum*a[i]))
return true;
if(DFS(sum-a[i]))
return true;
if(DFS(sum/a[i]))
return true;
if(DFS(a[i]-sum))
return true;
if(DFS(a[i]/sum))
return true;
visited[i]=0;
n1--;
}
}
return false;
}
int main()
{
int t,i,mark;
scanf("%d",&t);
while(t--)
{
scanf("%d%lf",&n,&target);
for(i=0;i<n;i++)
scanf("%lf",&a[i]);
memset(visited,0,sizeof(visited));
for(mark=1,i=0;i<n;i++)
{
n1=1;
visited[i]=1;
if(DFS(a[i]))
{
mark=0;
break;
}
visited[i]=0;
}
if(!mark)
printf("Yes\n");
else
printf("No\n");
}
return 0;
}


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

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

下面附上正确的代码

#include<stdio.h>
#include<string.h>
#include<math.h>
int n,target,visited[7],m;
double  a[7],zero=1e-6;
bool DFS(double sum)
{
if(m==n&&fabs(sum-target)<zero)
return true;
for(int i=0;i<n;i++)
{
if(!visited[i])
{
m++;
visited[i]=1;
if(DFS(sum+a[i])) return true;
if(DFS(sum*a[i])) return true;
if(DFS(sum-a[i])) return true;
if(DFS(sum/a[i])) return true;
if(DFS(a[i]/sum)) return true;
if(DFS(a[i]-sum)) return true;
visited[i]=0;
m--;
}
}
return false;
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&target);
for(int i=0;i<n;i++)
scanf("%lf",&a[i]);
int i,mark;
for(mark=i=0;i<n;i++)
{
m=1;
memset(visited,0,sizeof(visited));
visited[i]=1;
if(DFS(a[i]))
{
mark=1;
break;
}
}
if(mark)
printf("Yes\n");
else
printf("No\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: