質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

4回答

494閲覧

逆順に数値を入れるプログラム

退会済みユーザー

退会済みユーザー

総合スコア0

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2020/07/26 20:17

前提・実現したいこと

書きたいプログラムは内から外への渦巻なのですが、
以下のプログラムでは、外から内への渦巻となってしまいます。
大きい方から逆順に数値を入れて、最後に入れたところが1の入る位置になるように
入れる数値nを最大値(x*y)から初めていくということはわかるのですが、
それをコードにできません。
初学者です、よろしくお願いいたします。

#include <stdio.h> int main(void) { #define N 6 int a[N+2][N+2] = { 0 }; int p[4] = { 1,0,-1,0 }; int q[4] = { 0,1,0,-1 }; for (int i = 0; i <= N; i++) a[0][i] = a[N+1][i+1] = a[i][0] = a[i+1][N+1] = 1; for (int x = 1, y = 1, t = 0, i = 1; i <= N*N; x += p[t], y += q[t]) if (a[y][x] = i++, a[y + q[t]][x + p[t]] && ++t == 4) t = 0; for (int i = 1; i <= N; i++, putchar('\n')) for (int j = 1; j <= N; j++) printf("%4d", a[i][j]); return 0; } ```c言語

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

ベストアンサー

if (a[y][x] = i++ ...

コレ↑ を こう↓する

if (a[y][x] = N*N+1-i++ ...

投稿2020/07/26 23:07

episteme

総合スコア16612

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

if (a[y][x] = N*N+1-i++, a[y + q[t]][x + p[t]] && ++t == 4) t = 0;
とする手もありかも。

余計なことを言えば、カンマ演算子で詰め込みなんてしないほうがいいと思う。読む人を混乱させるだけでメリットはないのでは。

C

1 { 2 a[y][x] = N*N+1-i++; 3 if ( a[y + q[t]][x + p[t]] && ++t == 4) t = 0; 4 }

投稿2020/07/26 22:55

thkana

総合スコア7703

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

iを逆順にしてやればいいだけでは?

diff

1- for (int x = 1, y = 1, t = 0, i = 1; i <= N*N; x += p[t], y += q[t]) 2+ for (int x = 1, y = 1, t = 0, i = N * N; i >= 1; x += p[t], y += q[t]) 3- if (a[y][x] = i++, a[y + q[t]][x + p[t]] && ++t == 4) t = 0; 4+ if (a[y][x] = i--, a[y + q[t]][x + p[t]] && ++t == 4) t = 0;

投稿2020/07/26 20:43

編集2020/07/26 20:45
SHOMI

総合スコア4079

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

いろいろやり方はあります。

C

1#include <stdio.h> // printf, scanf, putchar 2#include <stdlib.h> // malloc, free 3 4void spiral(int n) 5{ 6 #define A(i, j) a[(i)*n + (j)] 7 int *a = malloc(n * n * sizeof(int)); 8 int m = n * n, i = 0, j = 0, k = n - 1; 9 10 for (m = n * n; m > 1; i++, j++, k -= 2) { 11 for (int c = k; --c >= 0; A(i, j++) = m--) ; 12 for (int c = k; --c >= 0; A(i++, j) = m--) ; 13 for (int c = k; --c >= 0; A(i, j--) = m--) ; 14 for (int c = k; --c >= 0; A(i--, j) = m--) ; 15 } 16 if (m == 1) A(i, j) = 1; 17 18 for (int i = -1; ++i < n; putchar('\n')) 19 for (int j = 0; j < n; j++) printf("%4d", A(i, j)); 20 21 free(a); 22} 23 24int main(void) 25{ 26 int n; 27 while (printf("n: "), scanf("%d", &n) == 1 && n > 0) 28 spiral(n); 29}

投稿2020/07/27 07:07

kazuma-s

総合スコア8224

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問