

C言語で下記を書きました。  
手元で実行してる限り合ってるのですが、WAになってしまう...  
どこか間違ってる箇所ありますでしょうか。  
他の方の回答を落としてローカルで実行結果をファイルにリダイレクトしてdiffしてみても差が無く。

[code]

    #include<stdio.h>
    
    void trace(int r[], int N) {
        for ( int i = 0; i < N ; i++) {
          printf("%d", r[i]);
          if (i != N - 1) {
            printf(" ");
          }
        }
        printf("\n");
    }
    int main() {
        
      int r[100];
    
      int N;
      scanf("%d", &N);
        for ( int i = 0; i < N ; i++) {
          scanf("%d", &r[i]);
        }
    
        trace(r, N);
        int j, i, v; 
        for ( i = 1; i < N ; i++) {
          v = r[i];
          j = i - 1;
    
          while(v >= 0 && r[j] > v ){
            r[j + 1] = r[j];
            j--;
          }
          r[j + 1] = v;
          trace(r, N);
        }
        
        return 0;
    }
    
[/code]


CC BY-SA 4.0
2022-01-16T14:17:54.500
85738
2022-01-16T23:09:39.350
2022-01-16T21:52:25.873
50927
50927
question
c
aizu online judgeのALDS1_1_Aで答えが合ってるのにWAになってしまう。


>
[code]

>     while(v >= 0 && r[j] > v ){
>       r[j + 1] = r[j];
>       j--;
>     }
>  
[/code]

ここだけ見ると`j`の値に制約がありません。そのため`r`の範囲を超えてアクセスしてしまうように見えます。逆に`v`の値は変化しないのでループ毎で`v >=
0`を評価する意義もないはずです。


CC BY-SA 4.0
2022-01-16T23:09:39.350
85743
2022-01-16T23:09:39.350
4236
85738
answer