結果
| 問題 |
No.217 魔方陣を作ろう
|
| コンテスト | |
| ユーザー |
zeosutt
|
| 提出日時 | 2015-05-26 22:57:45 |
| 言語 | C90 (gcc 12.3.0) |
| 結果 |
AC
|
| 実行時間 | 1 ms / 5,000 ms |
| コード長 | 2,964 bytes |
| コンパイル時間 | 219 ms |
| コンパイル使用メモリ | 23,532 KB |
| 実行使用メモリ | 5,376 KB |
| 最終ジャッジ日時 | 2024-07-06 10:09:55 |
| 合計ジャッジ時間 | 944 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 18 |
コンパイルメッセージ
main.c: In function ‘main’:
main.c:10:9: warning: ignoring return value of ‘scanf’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
10 | scanf("%d", &n);
| ^~~~~~~~~~~~~~~
ソースコード
#include <stdio.h>
int a[20][20];
int b[9][9];
int main(void) {
int i, j;
int n;
scanf("%d", &n);
if (n % 2 == 1) {
int cur_i = 0, cur_j = n / 2;
for (i = 1; i <= n * n; i++) {
a[cur_i][cur_j] = i;
cur_i = (cur_i + n - 1) % n;
cur_j = (cur_j + 1) % n;
if (a[cur_i][cur_j]) {
cur_i = (cur_i + 2) % n;
cur_j = (cur_j + n - 1) % n;
}
}
} else if (n % 4 == 0) {
for (i = 0; i < n; i++)
for (j = 0; j < n; j++)
if (i % 4 == 0 || i % 4 == 3) {
if (j % 4 == 0 || j % 4 == 3)
a[i][j] = i * n + j + 1;
} else
if (j % 4 == 1 || j % 4 == 2)
a[i][j] = i * n + j + 1;
for (i = n - 1; i >= 0; i--)
for (j = n - 1; j >= 0; j--)
if (i % 4 == 0 || i % 4 == 3) {
if (j % 4 == 1 || j % 4 == 2)
a[i][j] = (n - 1 - i) * n + (n - 1 - j) + 1;
} else
if (j % 4 == 0 || j % 4 == 3)
a[i][j] = (n - 1 - i) * n + (n - 1 - j) + 1;
} else {
int cur_i = 0, cur_j = n / 4;
for (i = 1; i <= (n / 2) * (n / 2); i++) {
b[cur_i][cur_j] = i;
cur_i = (cur_i + (n / 2) - 1) % (n / 2);
cur_j = (cur_j + 1) % (n / 2);
if (b[cur_i][cur_j]) {
cur_i = (cur_i + 2) % (n / 2);
cur_j = (cur_j + (n / 2) - 1) % (n / 2);
}
}
for (i = 0; i < n / 2; i++)
for (j = 0; j < n / 2; j++)
b[i][j] = (b[i][j] - 1) * 4;
for (i = 0; i < n; i++)
for (j = 0; j < n; j++)
if (i / 2 == n / 4 && j / 2 == n / 4)
// 中央U
if (i % 2 == 0)
if (j % 2 == 0)
a[i][j] = b[i / 2][j / 2] + 1;
else
a[i][j] = b[i / 2][j / 2] + 4;
else
if (j % 2 == 0)
a[i][j] = b[i / 2][j / 2] + 2;
else
a[i][j] = b[i / 2][j / 2] + 3;
else if (i / 2 == n / 4 + 1 && j / 2 == n / 4)
// 中央下L
if (i % 2 == 0)
if (j % 2 == 0)
a[i][j] = b[i / 2][j / 2] + 4;
else
a[i][j] = b[i / 2][j / 2] + 1;
else
if (j % 2 == 0)
a[i][j] = b[i / 2][j / 2] + 2;
else
a[i][j] = b[i / 2][j / 2] + 3;
else if (i / 2 <= n / 4)
// 通常L
if (i % 2 == 0)
if (j % 2 == 0)
a[i][j] = b[i / 2][j / 2] + 4;
else
a[i][j] = b[i / 2][j / 2] + 1;
else
if (j % 2 == 0)
a[i][j] = b[i / 2][j / 2] + 2;
else
a[i][j] = b[i / 2][j / 2] + 3;
else if (i / 2 == n / 4 + 1)
// 通常U
if (i % 2 == 0)
if (j % 2 == 0)
a[i][j] = b[i / 2][j / 2] + 1;
else
a[i][j] = b[i / 2][j / 2] + 4;
else
if (j % 2 == 0)
a[i][j] = b[i / 2][j / 2] + 2;
else
a[i][j] = b[i / 2][j / 2] + 3;
else
// X
if (i % 2 == 0)
if (j % 2 == 0)
a[i][j] = b[i / 2][j / 2] + 1;
else
a[i][j] = b[i / 2][j / 2] + 4;
else
if (j % 2 == 0)
a[i][j] = b[i / 2][j / 2] + 3;
else
a[i][j] = b[i / 2][j / 2] + 2;
}
for (i = 0; i < n; i++)
for (j = 0; j < n; j++)
printf("%3d%c", a[i][j], " \n"[j == n - 1]);
return 0;
}
zeosutt