1

次のコードが機能しない理由がわかりませんでした。スワップ操作が機能しない理由として考えられるものは何ですか。

#include <iostream>

using namespace std;

void rotateK(int* arr, int start, int finish) {
    int temp;
    for(int i=0;i<=finish;i++) {
        temp=arr[i];
        arr[i]=arr[finish-i];
        arr[finish-i]=temp;
    }
    for(int i=0;i<=finish;i++)
        cout<<arr[i]<<" ";
    cout<<endl;
}


int main(){
    int arr[5]={1,2,3,4,5};
    rotateK(arr,0,4);
    return 0;

}
4

2 に答える 2

9

それは機能します(ただし、どのように機能させたいかではありません)。ただし、要素を2回交換するため、処理される配列は元の配列と同じです。

あなたはおそらく欲しい:

for(int i=0 ; i<=finish/2 ; i++)

あるいは

for(int i=start;i<=(finish-start)/2 + start;i++)

実際に使用するようにstart

于 2012-06-22T13:19:02.300 に答える
3

要素を2回交換しています。配列のセグメントを反転するというこのアイデアを検討できます。

int i = start;
int j = finish;
while( i < j ) {
    temp=arr[i];
    arr[i]=arr[j];
    arr[j]=temp;
    ++i; --j;
}

このように書くと間違えにくいです。

于 2012-06-22T13:27:02.123 に答える