C言語関係掲示板

過去ログ

No869 奇数の魔方陣に枠を書く

[戻る] [ホームページ]
No.11278

奇数魔方陣の問題について教えてください。。
投稿者---kaka(2003/12/18 12:21:40)


奇数魔方陣のプログラムは一応出来たのですが
現時点ではこんな感じです↓

#include <stdlib.h>
#include <stdio.h>
int main()
{
        int data[9][9],i,j,n,cnt,a;
        char str[256];
        while(1){
                printf("奇数を入力してください=");
                fgets(str,256,stdin);
                if(str[0]=='q'||str[0]=='Q')
                        break;
                n=atoi(str);
                if(n%2==0){
                        printf("偶数です!\n");
                        continue;
                }
                i=0;
                j=n/2;
                cnt=1;
                data[i][j]=cnt;
                for(cnt=2;cnt<=(n*n);cnt++){
                        if(cnt%n==1){
                                i++;
                        }
                        else{
                                i--;
                                j++;
                        }
                        if(i<0)
                                i=n-1;
                        if(j==n)
                                j=0;
                        data[i][j]=cnt;
                }
                for(i=0;i<n;i++){
                        for(j=0;j<n;j++){
                                printf("%3d",data[i][j]);
                                if(j==n-1)
                                        printf("\n");
                        }
                }
        }

}


奇数魔方陣はできたのですが、見にくいので
↓のように枠をつけて表示させたいのですが
+−−+−−+−−+
| 8 | 1 | 6 |
+−−+−−+−−+
| 3 | 5 | 2 |
+−−+−−+−−+
| 4 | 9 | 2 |
+−−+−−+−−+
うまく表示できません。よかったらどのようにやればいいか
教えてください。
よろしくお願いします。

No.11279

Re:奇数魔方陣の問題について教えてください。。
投稿者---NykR(2003/12/18 12:42:53)


こんな感じでどうでしょ。

putchar('+'); for(j=0;j<n;j++) printf("---+"); puts("");
for(i=0;i<n;i++){
    putchar('|'); for(j=0;j<n;j++) printf("%3d|",data[i][j]); puts("");
    putchar('+'); for(j=0;j<n;j++) printf("---+"); puts("");
}


No.11281

Re:奇数魔方陣の問題について教えてください。。
投稿者---NykR(2003/12/18 12:55:15)


>こんな感じでどうでしょ。
こっちに修正します。

for (i = 0; i < n; i++) {
    for (j = 0; j < n; j++) printf("+---"); puts("+");
    for (j = 0; j < n; j++) printf("|%3d", data[i][j]); puts("|");
}
for (j = 0; j < n; j++) printf("+---"); puts("+");


No.11299

Re:奇数魔方陣の問題について教えてください。。
投稿者---kaka(2003/12/18 21:34:42)


>>こんな感じでどうでしょ。
>こっちに修正します。
>
><pre>for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) printf("+---"); puts("+");
for (j = 0; j < n; j++) printf("|%3d", data[i][j]); puts("|");
}
for (j = 0; j < n; j++) printf("+---"); puts("+");
</pre>なるほど!ありがとうございました^^