请大牛给个效率最高的算法,谢谢

raindream_bcb 2019-03-21 08:21:05


在上图9个格子里填上1至999中的任意数,同一数字在不同位置可重复使用,使得三行及三列的和都为999

求出有多少种填写方案。

请哪位大神给个效率最高的算法,非常感谢,我因为工作原因,无法经常在线和大家互动,请大家谅解。
...全文
131 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
qybao 2019-03-21
  • 打赏
  • 举报
回复
关注学习一下 目前自己想到的也只有穷举+行列和条件 int a[9]; count=0; //用一维数组保存二维行列 //a[0] a[1] a[2] //a[3] a[4] a[5] //a[6] a[7] a[8] for (a[0]=1; a[0]<998; a[0]++) { for (a[1]=999-a[0]; a[1]>0; a[1]- -) { a[2]=999-a[0]-a[1]; for (a[4]=999-a[1]; a[4]>0; a[4]- -) { a[7]=999-a[4]-a[1]; for (a[3]=999-a[0]; a[3]>0; a[3]- -) { a[5]=999-a[3]-a[4]; a[6]=999-a[0]-a[3]; if (999-a[2]-a[5]==999-a[6]-a[7]) { a[8]=999-a[2]-a[5]; count++; for (int k=0; k<3; k++) printf(“%3d %3d %3d\n”, a[k*3], a[k*3+1], a[k*3+2]); } } } } } printf(“count=%d\n”, count);
孤必有邻 2019-03-21
  • 打赏
  • 举报
回复
此类问题(穷举)的高效处理,主要是通过“人工”智能,尽可能排除掉无效的穷举任务,达到数量级的计算量减少。
比如说:某行第一格填入333,则第二格的循环就可以限制在1~(999-333);同理,第三格的循环类似处理。
  • 打赏
  • 举报
回复
333 333 333 333 333 333 333 333 333 这种也算?
lin5161678 2019-03-21
  • 打赏
  • 举报
回复
引用 5 楼 lin5161678 的回复:
看起来是 991032937065964008
不对 少算了一个约束
lin5161678 2019-03-21
  • 打赏
  • 举报
回复
看起来是 991032937065964008

64,676

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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