1

アルゴリズムのスクロール番号を探しています。

1、2、3、4 の数字を持つ配列があります。新しい配列を 4,1,2,3 にしたいと思います。

誰もこれを行う方法を知っていますか?

しかし、D[4] だけではありません。1、2、3、4、5、6、7

4

5 に答える 5

2

剰余算術を使用することは、おそらく最も洗練された方法です。たとえば、次のようにできます。

int a[size];
int b[size];

for (int n=0; n<size; n++) 
  b[(n+1)%size] = a[n];

要素を複数の位置に移動する必要がある場合は、b[(n+1)%size]tob[(n+2)%size]などに変更できます。

于 2012-05-05T21:16:02.883 に答える
1
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

/* Assumed slide is >= 0 and < arr_len. */
void slide_arr(int * arr, int arr_len, int slide)
{
  int i;
  /* If you are using C99, variable length array would be useful. */
  int * tmp_arr = malloc(arr_len * sizeof(int));
  memcpy(tmp_arr, arr, arr_len * sizeof(int));

  for(i = 0; i < arr_len; i++) {
    arr[i] = tmp_arr[(slide + i) % arr_len];
  }

  free(tmp_arr);
}

int main(void)
{
  int i;
  int arr[] = {1, 2, 3, 4, 5};
  slide_arr(arr, _countof(arr), 2);

  for(i = 0; i < _countof(arr); i++) {
    printf("%d, ", arr[i]);
  }

  return EXIT_SUCCESS;
}

配列が与えられた場合、as1は{1, 2, 3, 4, 5}slide_arr()slideようになります。

{5, 1, 2, 3, 4}

2の場合slide、次のようになります。

{4, 5, 1, 2, 3}

私はこれをVC++で書きました。GCCでコンパイルする場合は、ARRAY_SIZEの代わりにを使用してください_countof

于 2012-05-05T21:26:16.947 に答える
1

その場でのバージョン:

#include <stdio.h>

void swap(int* a, int* b){
int temp = *a;
*a = *b;
*b = temp;
}

int main(){
int i;
int size = 4;
int arr[4] = {1,2,3,4};
for(i = 0; i < size; i++){
  printf("%d, ", arr[i]);
}
printf("\n");
for( i = size-1; i > 0; i-- ){
  swap(&arr[i],&arr[i-1]);
}
for(i = 0; i < size; i++){
  printf("%d, ", arr[i]);
}
于 2012-05-05T21:31:10.553 に答える
1

リストが十分に小さい場合は、1 つの大きな配列でリストを 2 倍にし、ポインターが大きな配列をトラバースするようにすることができます。C でこれを行う方法が正確にはわかりませんが、うまくいけば C++ の例で要点がわかるでしょう。

int x[] = { 1, 2, 3, 4, 1, 2, 3 };

次に、次のように 2 番目のポインターを配列の上に移動させることができます。

int* noshift = x;
int* oneshift = x + 1;
int* twoshift = x + 2;
int* threeshift = x + 3;

4 番目のシフトは、この例ではシフトしないことと同じです。これにより、わずかに多くのメモリが必要になります。要素の配列の場合n、これは配列2*n-1内の要素を占有しますが、時間とメモリとすべてのジャズが関係します。

于 2012-05-05T21:32:09.673 に答える
0
#include <stdio.h>
int main(){
 int i;
 int len = 5;
 int arr = {1,2,3,4,5};

 int last = arr[len-1]; // Last element of the array example(5)

 for(i = len - 1; i > 0 ; i--)
   arr[i] = arr[i-1];

 arr[0] = last;

 retrurn 0;
}
于 2012-10-04T05:23:42.127 に答える