0

そのため、以前に入力された配列が、1 から始まり n (n は配列サイズ) で終わる 1 の間隔で増加しているかどうかを確認しようとしています。

これが私がこれまでに得たものです:

    for (int i =0; i<n;i++){
                for (next=i;next<n;next++){
                    if(arr[i]+1 = arr[next]){
                        x = 1;  //ignore this, it relates to the rest of the code.
                    }
                    else{
                        printf ("\nThis is not a permutation.");
                        break;
                }
        }
}

さて、私の考えでは、このコードは互いに隣り合っているパラメーターを比較し、次のパラメーターが前の +1 と等しい場合、明らかに 1 増加しています。問題は、これが false の場合、印刷されないことです。 「これは順列ではありません」とループを壊しません。

どんな助けでも大歓迎です。

また、配列が番号1で始まるかどうかを確認することについての洞察をいただければ幸いです。

ありがとう

4

4 に答える 4

0

arr[0] == 1後続のすべての配列要素が1前の要素よりも大きいかどうかをテストしたいようです。それは配列の値をチェックするのと同じではありません[1,2,3,...,n]か?

for (int i = 0; i < n; ++n) {
    if (arr[i] != i + 1) {
        printf("\nThis is not a permutation.");
        break;
    }
}
于 2013-08-02T23:29:48.070 に答える
0

if(arr[i]+1 == arr[next])代わりに試しましたif(arr[i]+1 = arr[next])か??

于 2013-08-02T21:17:43.983 に答える
0

この行のように見えます:

if(arr[i]+1 = arr[next]){

あなたは比較を意図していました:

if(arr[i]+1 == arr[next]){
于 2013-08-02T21:16:49.157 に答える
0

シーケンスが増加していることを確認する必要がある場合、すべての要素を他の要素と比較するのはなぜですか? for ループは 1 つだけ必要です。

for (i = 1; i < n; i++)
{
    if (arr[i - 1] + 1 == arr[i])
        ... // keep going
    else
        ... // not a permutation
}

基本的に、コードが行うことは、i 番目の要素の後のすべての要素がその i 番目よりも大きいことを 1 つずつチェックすることです。最終的に、これは不可能なケースにつながります (2 つの数値は等しくなければならないが、同時に 1 だけ異なる必要があるため)。

于 2013-08-02T21:26:02.800 に答える