社区
数据结构与算法
帖子详情
求教(有没有人能做的出来的--最好能用多种方法)
CycloneFox
2003-10-10 11:27:13
9个数字从1~9分别放在3*3的格子里使横,竖,斜相加所得的数均等于同一个数.
用C++编写.
扩展为25,49,81个数.
那位大虾肯帮小弟这个忙呀?
...全文
52
6
打赏
收藏
求教(有没有人能做的出来的--最好能用多种方法)
9个数字从1~9分别放在3*3的格子里使横,竖,斜相加所得的数均等于同一个数. 用C++编写. 扩展为25,49,81个数. 那位大虾肯帮小弟这个忙呀?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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
打赏
举报
回复
幻方问题嘛~
人教部编道德与法治三年级上册知识点.docx
人教部编道德与法治三年级上册知识点.docx
春一年级语文下册 第七单元 提升练习 冀教版-冀教版小学一年级下册语文试题.doc
春一年级语文下册 第七单元 提升练习 冀教版-冀教版小学一年级下册语文试题.doc
部编人教小学三年级语文上册口语交际请教PPT学习教案.pptx
部编人教小学三年级语文上册口语交际请教PPT学习教案.pptx
八年级语文下册23送东阳马生序重点理解苏教版
八年级语文下册23送东阳马生序重点理解苏教版
新部编版三年级道德与法治上册月考考试题【带答案】.pdf
新部编版三年级道德与法治上册月考考试题【带答案】.pdf
数据结构与算法
33,027
社区成员
35,336
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章