洛谷 B3940 [GESP样题 四级] 填幻方题解
AC记录ALC提示抄代码可不是什么良好的习惯AC记录。
·
ALC 提示:抄代码可不是什么良好的习惯 \Huge \textrm{\color{red}ALC 提示:抄代码可不是什么良好的习惯} ALC 提示:抄代码可不是什么良好的习惯
代码制作不易 , 给个赞谢谢喵 a w a \Huge \color{navy}代码制作不易,给个赞谢谢喵 awa 代码制作不易,给个赞谢谢喵awa
AC 记录 \Huge \textrm{\color{darkblue} AC 记录} AC 记录
这道题其实是属于 GESP 等级考试中比较简单的一类了 qaq
由于题目已经给了我们方法,所以我们可以直接写代码
#include <bits/stdc++.h>
using namespace std;
int ans[25][25];
int n, cnt = 1;
bool fullfill(int ans[25][25]) { // 判断数组是否填满
for(int i = 1; i <= n; i++) {
for(int j = 1; j <= n; j++) {
if(!ans[i][j]) return false;
}
}
return true;
}
int main() {
cin >> n;
int x = 1, y = n / 2 + 1;
ans[x][y] = 1;
while(!fullfill(ans)) {
if(!ans[((x == 1) ? n : x - 1)][((y == n) ? 1 : y + 1)]) { // 判断如果 x 等于 1 , 则返回 1 , 否则返回 x - 1, 后面的同理,只不过是返回 y + 1
ans[((x == 1) ? n : x - 1)][((y == n) ? 1 : y + 1)] = cnt + 1; // cnt 是记录此时的数 , 然后坐标解释同上
x = ((x == 1) ? n : x - 1);
y = ((y == n) ? 1 : y + 1);
cnt++;
} else {
ans[((x == n) ? 1 : x + 1)][y] = cnt + 1;
x = ((x == n) ? 1 : x + 1);
cnt++;
}
}
for(int i = 1; i <= n; i++) {
for(int j = 1; j <= n; j++) {
cout << ans[i][j] << ' '; // 输出数组
}
cout << endl;
}
}
这样一份简单易懂的代码就写好了 awa , 你学会了吗?
更多推荐



所有评论(0)