結果

問題 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);
      |         ^~~~~~~~~~~~~~~

ソースコード

diff #
プレゼンテーションモードにする

#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;
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0