发个算法问题, 看看谁的算法好

ccp5780199 2007-12-11 07:17:11
将1到10填到以下公式中,其中不允许重复。

a / b + c / d + e / f = g / h + k / j

我用最土的穷举法用了4800毫秒= =!

...全文
150 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
lihuinihao6315 2007-12-26
  • 打赏
  • 举报
回复
路过祭奠 一下各路 高人.
Efcndi 2007-12-25
  • 打赏
  • 举报
回复
用不带剪枝的dfs搜索。

1368个解答。

平均用时1050ms。

带了剪枝的如10/1在左边立刻剪掉,效果没有明显提高平均1030ms。



const static int Size = 10;
bool v[Size];
int data[Size];
int count;

void Expression::DFS(int step)
{
if(step == Size)
{
bool equal = Equal(1.0*data[0]/data[1] + 1.0*data[2]/data[3]
+ 1.0*data[4]/data[5],
1.0*data[6]/data[7]+1.0*data[8]/data[9]);

if( equal )
{
cout<<data[0]<<"/"<<data[1]<<"+"<<data[2]<<"/"<<data[3]<<"+"
<<data[4]<<"/"<<data[5]<<"="<<data[6]<<"/"<<data[7]
<<"+"<<data[8]<<"/"<<data[9]<<"\n";

++count;
}
return;
}

for(int i=0; i<Size; ++i)
{
if(!v[i])
{
v[i] = true;
data[step] = i+1;
DFS(step+1);
v[i] = false;
}
}
}



ccp5780199 2007-12-25
  • 打赏
  • 举报
回复
啊 放太久又忘了= =!
楼上的高人啊对SQL语句很了解哦
fcuandy 2007-12-13
  • 打赏
  • 举报
回复
WHERE CAST(1.0*a.i/b.i   +   1.0*c.i/d.i   +   1.0*e.i/f.i AS DECIMAL(10,8))   =   CAST(1.0*g.i/h.i   +   1.0*k.i/j.i AS DECIMAL(10,8))


否则就错了.
fcuandy 2007-12-13
  • 打赏
  • 举报
回复
用sql也可以算一算,死机了,别怪我,呵呵


DECLARE @t TABLE (i INT)
INSERT @t SELECT 1
UNION ALL SELECT 2
UNION ALL SELECT 3
UNION ALL SELECT 4
UNION ALL SELECT 5
UNION ALL SELECT 6
UNION ALL SELECT 7
UNION ALL SELECT 8
UNION ALL SELECT 9
UNION ALL SELECT 10

SELECT a.i,b.i,c.i,d.i,e.i,f.i,g.i,h.i,k.i,j.i
FROM @t a
INNER JOIN @t b
ON b.i NOT IN(SELECT i FROM @t WHERE i=a.i)
INNER JOIN @t c
ON c.i NOT IN(SELECT i FROM @t WHERE i=a.i or i=b.i)
INNER JOIN @t d
ON d.i NOT IN(SELECT i FROM @t WHERE i=a.i or i=b.i or i=c.i)
INNER JOIN @t e
ON e.i NOT IN(SELECT i FROM @t WHERE i=a.i or i=b.i or i=c.i or i=d.i)
INNER JOIN @t f
ON f.i NOT IN(SELECT i FROM @t WHERE i=a.i or i=b.i or i=c.i or i=d.i or i=e.i)
INNER JOIN @t g
ON g.i NOT IN(SELECT i FROM @t WHERE i=a.i or i=b.i or i=c.i or i=d.i or i=e.i or i=f.i)
INNER JOIN @t h
ON h.i NOT IN(SELECT i FROM @t WHERE i=a.i or i=b.i or i=c.i or i=d.i or i=e.i or i=f.i or i=g.i)
INNER JOIN @t k
ON k.i NOT IN(SELECT i FROM @t WHERE i=a.i or i=b.i or i=c.i or i=d.i or i=e.i or i=f.i or i=g.i or i=h.i)
INNER JOIN @t j
ON j.i NOT IN(SELECT i FROM @t WHERE i=a.i or i=b.i or i=c.i or i=d.i or i=e.i or i=f.i or i=g.i or i=h.i or i=k.i)
WHERE a.i/b.i + c.i/d.i + e.i/f.i = g.i/h.i + k.i/j.i
bwangel 2007-12-13
  • 打赏
  • 举报
回复
算法倒没太在意,倒是LZ的名字我拿来调戏了一下女同事。
军哥手记 2007-12-13
  • 打赏
  • 举报
回复
这个有点难啊,10元方程啊!
ccp5780199 2007-12-13
  • 打赏
  • 举报
回复
没人有什么好的思路吗?
真相重于对错 2007-12-11
  • 打赏
  • 举报
回复
stack

62,072

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧