teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

コードの抜け修正

2021/06/30 01:21

投稿

fana
fana

スコア12234

answer CHANGED
@@ -30,7 +30,9 @@
30
30
  {
31
31
  if( k<0 )break; //※この内側ループを抜ける条件(1)
32
32
  if( x>=table[k] )break; //※この内側ループを抜ける条件(2)
33
+
33
-
34
+ table[k+1]= table[k];
35
+
34
36
  k--;
35
37
  }
36
38
  //-----↑内側のforの部分↑

1

追記

2021/06/30 01:21

投稿

fana
fana

スコア12234

answer CHANGED
@@ -8,4 +8,35 @@
8
8
  要は,そのコードをあなたが忠実に実行(シミュレート)してみる.
9
9
  そうすればやってることが見えてくるでしょう.
10
10
  一個データが入力されるたびに,配列をどのように更新しているのか,というのが.
11
- (まぁ,「どのように」=「昇順」なわけだが)
11
+ (まぁ,「どのように」=「昇順」なわけだが)
12
+
13
+ ---
14
+
15
+ コードが読めない(?)とのことなので,
16
+ 件の2重forの部分を処理順が分かりやすい(つもりの)形に書き換えてみました.
17
+
18
+ * ループをwhileに置き換えて,`for(A; B; C)` の{A,B,C}の処理順を明確化
19
+ * ループ条件をwhileに書くのではなく,ループ内で「ループを抜ける条件」としてbreakする形に書いた.
20
+
21
+ ```C
22
+ n=0;
23
+ while( 1 )//※とにかく無条件にループ
24
+ {
25
+ if( scanf("%d",&x) != 1 )break; //※このループを抜ける条件
26
+
27
+ //-----↓内側のforの部分↓
28
+ k = n-1;
29
+ while( 1 )//※とにかく無条件にループ
30
+ {
31
+ if( k<0 )break; //※この内側ループを抜ける条件(1)
32
+ if( x>=table[k] )break; //※この内側ループを抜ける条件(2)
33
+
34
+ k--;
35
+ }
36
+ //-----↑内側のforの部分↑
37
+
38
+ table[k+1] = x;
39
+
40
+ n++;
41
+ }
42
+ ```