社区
数据结构与算法
帖子详情
求教(有没有人能做的出来的--最好能用多种方法)
CycloneFox
2003-10-10 11:27:13
9个数字从1~9分别放在3*3的格子里使横,竖,斜相加所得的数均等于同一个数.
用C++编写.
扩展为25,49,81个数.
那位大虾肯帮小弟这个忙呀?
...全文
76
6
打赏
收藏
求教(有没有人能做的出来的--最好能用多种方法)
9个数字从1~9分别放在3*3的格子里使横,竖,斜相加所得的数均等于同一个数. 用C++编写. 扩展为25,49,81个数. 那位大虾肯帮小弟这个忙呀?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
CycloneFox
2003-10-12
打赏
举报
回复
楼上的师兄,谢谢了。
CycloneFox
2003-10-11
打赏
举报
回复
谢谢了真是太好了.
哈哈.
BlueSky2008
2003-10-11
打赏
举报
回复
FAQ->组合数学算法->n阶幻方解法。
nealzane
2003-10-11
打赏
举报
回复
修正了小小的漏洞(不过也是洞啊 =_=b):
#include <iostream>
using namespace std;
bool used[12] = { false };
int board[4][4];
bool check(void) {
return (board[1][1] + board[2][1] + board[3][1] == 15 &&
board[1][2] + board[2][2] + board[3][2] == 15 &&
board[1][3] + board[2][3] + board[3][3] == 15 &&
board[1][1] + board[2][2] + board[3][3] == 15 &&
board[1][3] + board[2][2] + board[3][1] == 15);
}
void rowAt(int row) {
if (row == 0) {
if (check()) {
for (int i = 1; i <= 3; i ++, cout << endl)
for (int j = 1; j <= 3; j ++)
cout << board[i][j] << ' ';
cout << endl;
}
}
else {
for (int i = 1; i <= 9; i ++) {
if (!used[i]) {
used[i] = true;
board[row][1] = i;
for (int j = 1; j <= 9; j ++) {
if (!used[j]) {
used[j] = true;
board[row][2] = j;
int k = 15 - i - j;
if (k > 0 && k < 10 && !used[k]) {
used[k] = true;
board[row][3] = k;
rowAt(row - 1);
used[k] = false;
}
used[j] = false;
}
}
used[i] = false;
}
}
}
}
int main(void) {
rowAt(3);
}
------------------------------------------------------------
输出:
4 3 8
9 5 1
2 7 6
6 1 8
7 5 3
2 9 4
2 7 6
9 5 1
4 3 8
8 1 6
3 5 7
4 9 2
2 9 4
7 5 3
6 1 8
8 3 4
1 5 9
6 7 2
4 9 2
3 5 7
8 1 6
6 7 2
1 5 9
8 3 4
nealzane
2003-10-11
打赏
举报
回复
扔块砖头:
#include <iostream>
using namespace std;
bool used[12] = { false };
int board[4][4];
bool check(void) {
return (board[1][1] + board[2][1] + board[3][1] == 15 &&
board[1][2] + board[2][2] + board[3][2] == 15 &&
board[1][3] + board[2][3] + board[3][3] == 15 &&
board[1][1] + board[2][2] + board[3][3] == 15 &&
board[1][3] + board[2][2] + board[3][1] == 15);
}
void rowAt(int row) {
if (row == 0) {
if (check()) {
for (int i = 1; i <= 3; i ++, cout << endl)
for (int j = 1; j <= 3; j ++)
cout << board[i][j] << ' ';
cout << endl;
}
}
else {
for (int i = 1; i <= 9; i ++) {
if (!used[i]) {
used[i] = true;
board[row][1] = i;
for (int j = 1; j <= 9; j ++) {
if (!used[j]) {
used[j] = true;
board[row][2] = j;
int k = 15 - i - j;
if (k > 0 && !used[k]) {
used[k] = true;
board[row][3] = k;
rowAt(row - 1);
used[k] = false;
}
used[j] = false;
}
}
used[i] = false;
}
}
}
}
int main(void) {
rowAt(3);
}
------------------------------------------------------------
输出:
4 3 8
9 5 1
2 7 6
6 1 8
7 5 3
2 9 4
2 7 6
9 5 1
4 3 8
8 1 6
3 5 7
4 9 2
2 9 4
7 5 3
6 1 8
8 3 4
1 5 9
6 7 2
4 9 2
3 5 7
8 1 6
6 7 2
1 5 9
8 3 4
Kavent
2003-10-10
打赏
举报
回复
幻方问题嘛~
没有人比我更爱你
迅雷下载: http://fundown.china.com/music/wangzheng/meiyourenbiwogengaini.mp3 从爱上你的一瞬间 我终于明白了孤单 是否爱只是片段 仿佛梦境的片段 陨落中的幸福用心碎来还 不是眼泪落下来 不知如何这明白 情话若只是偶尔兑现的谎言 我宁愿选择沉默来表白 没有人会比我更爱你 为你放...
做
最好的自己——摘自李镇西的《
做
最好的老师》
谁都渴望成为英雄豪杰、伟人巨匠,但受自身条件、社会环境等制约,真正成为艺术家、文学家、企业家的,只是少数。“人比人,气死人”,因为你比的人,处于人类文明的金字塔尖,当然越比越觉得自己无能。但是,请别忘了,虽然也许你永远成不了“家”,但通过努力,你却完全可以成为最好的你。 有人说:“每个人都是一棵树。”的确,我们生活的世界像一片森林,其中有的人是乔木,有的人是灌木;有的人是参天的
李开复的
做
最好的自己
李开复博士的首部中文著作、亲笔为中国青少年撰写的《
做
最好的自己》一书已由人民出版社出版。李开复博士在中国的大学生中一直有很大的影响力,这不仅因为他曾是微软的全球副总裁,IT业顶级的技术专才,更不仅仅是他引起了全球瞩目的两大IT巨人之间的诉讼战争。他的影响力来自他对中国大学生一如既往的关爱之心。 李开复生于我国台湾,受教于美国,用他自己的话说是"美国脑,中国心"。从他到...
学习
做
游戏的最好方式就是“以
做
代学”
学习
做
游戏的最好方式
做
最好的自己
既然多元化的成功才是真正的成功,那么,该如何追寻多元化的成功呢?
多元化成功并不要求每个人都去刻意重复别人的成功之路,或者用别人的标准来评价和衡量自己,但它要求我们重视诚信的价值观,拥有完整、均衡的人生态度,善于用智慧选择最佳的解决方案,并能不断地追寻自己的理想和兴趣、不断地学习和实践,妥善地处理好身边人际和沟通问题……如果从这些方面严格要求自己,让自己的每一天都能有新的收获和新的提高,那么,无论是否取得了预期的结果,这种努力本身就是最可嘉许的成功了。所以说:
数据结构与算法
33,025
社区成员
35,336
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章