Cycle de colonnes d’une masortingce

J’ai un problème qui me demande de faire un cycle de colonnes d’une masortingce MxN Z nombre de fois. Le code que j’ai actuellement est ci-dessous, mais lorsque je l’exécute, certaines des colonnes disparaissent.

Mon code doit déplacer la première colonne dans la seconde, la seconde dans le troisième, etc., puis la dernière dans la première colonne.

int first[5][5], second[5][5], i, j; int temp[5][5]; for(i = 0; i < 5; i++){ for(j = 0; j < numprocs; j++){ temp[i][j] = second[i][j]; second[i][j] = second[i--][j]; second[i++][j] = temp[i][j]; } } 

  • Il n’est pas nécessaire d’avoir un tableau en double de taille complète . Vous pouvez faire défiler les éléments dans un tableau lui-même. Essayez-le sur un morceau de papier.
  • Vous devrez effectuer une sauvegarde de la 1ère colonne à chaque fois, car celle-ci sera écrasée. Ensuite, restaurez cette sauvegarde.

Je l’ai fait en utilisant un tableau simple et quelques boucles. Jetez un coup d’œil au code, il se passe d’explications et j’ai commenté comme il convient:

 #include  #include  #define M 2 //no of rows #define N 5 //no of columns int print(int (*masortingx)[N]); int main(void) { int masortingx[M][N]; int backup[M]; int Z; //no of times to cycle int i, j, k; //get the i/p printf("Enter masortingx:\n"); for(i = 0 ; i < M ; i++) for(j = 0 ; j < N ; j++) scanf("%d", &matrix[i][j]); //get Z printf("How many times to cycle?\n"); scanf("%d", &Z); //for Z = 0 if(Z == 0) { print(matrix); return 0; } Z = (Z%N); //adjust Z to avoid unnecessary rotations because //rotating an array of 5 columns 25 times is same as rotating 0 times //(it will end up in original position after 25 rotations) for(k = 0 ; k < Z ; k++) //first loop for Z rotations { //take backup of 1st col of matrix for(int i = 0 ; i < M ; i++) backup[i] = matrix[i][0]; for(i = N - 1 ; i >= 0 ; i--) //second loop for copying each column { //copy ith column into (i+1)%n th column for(j = 0 ; j < M ; j++) //loop to copy all elements of column { matrix[j][(i+1)%N] = matrix[j][i]; //logic to wrap the last col to first one } } //restore backup into 1st col for(j = 0 ; j < M ; j++) matrix[j][1] = backup[j]; } print(matrix); } int print(int (*matrix)[N]) { int i, j; for(i = 0 ; i < M ; i++) { for(j = 0 ; j < N ; j++) { printf("%d ", matrix[i][j]); } printf("\n"); } } 

Voici une exécution du programme exemple:

 Enter masortingx: 1 2 3 4 5 1 2 3 4 5 How many times to cycle? 1 5 1 2 3 4 5 1 2 3 4 aditya@aditya-laptop:~/Desktop$ cc so.c -std=c11&& ./a.out Enter masortingx: 1 2 3 4 5 1 2 3 4 5 How many times to cycle? 3 3 4 5 1 2 3 4 5 1 2