fork download
  1.  
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <stdbool.h>
  5. //definisco una funzione che legge l'input e che restituisce la lunghezza della sequenza
  6. int read_input(int array[]){
  7. int num;
  8. int i=0,j;
  9. bool stop= false;
  10. while(stop==false){
  11. scanf("%d",&num);
  12. for (j=0; j<i;j++){
  13. if (array[j]==num){
  14. stop=true;
  15. }
  16. }
  17. if (stop==false){
  18. array[i]=num;
  19. i++;
  20. }
  21. }
  22. return i;
  23. }
  24. // definisco una funzione che determina se due sequenze collidono
  25.  
  26. bool collides(int A[], int B[], int n){
  27. int i;
  28. for (i = 0; i < n; i++) {
  29. if (A[i] == B[i]) {
  30. return true;
  31. }
  32. }
  33. return false;
  34. }
  35.  
  36. // definisco una funzione che modifica una sequenza per ottenere la prossima permutazione possibile in ordine lessicografico
  37.  
  38. void next_permutation(int array[], int length){
  39. int i= length -2, j=length -1, temp;
  40. while (array[i]>= array[i+1])
  41. i--;
  42. while (array[j]<=array[i])
  43. j--;
  44. temp=array[i];
  45. array[i]=array[j];
  46. array[j]=temp;
  47.  
  48. j=length-1;
  49. i++;
  50. while (i<j){
  51. temp=array[i];
  52. array[i]=array[j];
  53. array[j]=temp;
  54. i++;
  55. j--;
  56. }
  57. }
  58.  
  59. // definisco una funzione che prende in input una sequenza e controlla se non collide con le sequenze già scritte
  60. bool acceptable(int array[],int*matrice, int length ,int n_permutations){
  61. bool accepted=true;
  62. int i;
  63. for (i=0;i<n_permutations;i++){
  64. if (collides(&(matrice[i*length]),array,length)){
  65. accepted=false;
  66. }
  67. }
  68. return accepted;
  69. }
  70. int main(){
  71. int length;
  72. int* array= (int*)malloc(15*sizeof(int));
  73. length=read_input(array);
  74.  
  75. // calcolo il numero totale di permutazioni (length!)
  76. int total_permutations=1;
  77. int i,j;
  78. for (i=1;i<=length;i++){
  79. total_permutations *=i;
  80. }
  81.  
  82. //creo la matrice che conterrà le sequenze richieste
  83. int* matrice=(int*)malloc(length*length*sizeof(int));
  84.  
  85. //creo la sequenza dei numeri fissi
  86. int* fixed= (int*)malloc(length*sizeof(int));
  87. for (i=0;i<length;i++){
  88. fixed[i]=i;
  89. }
  90.  
  91. //la prima riga della matrice è la sequenza dei numeri fissi, la seconda è la sequenza in input
  92. for (j=0; j<length;j++){
  93. matrice[j]=fixed[j];
  94. matrice[1*length+j]=array[j];
  95. }
  96.  
  97.  
  98. //ottengo la matrice con le sequenze richieste
  99. int m=2;
  100. for(i=0; i<total_permutations-1;i++){
  101. next_permutation(fixed,length);
  102. if(acceptable(fixed,matrice,length,m)){
  103. for(j=0; j<length;j++){
  104. matrice[m*length+j]=fixed[j];
  105. }
  106. m++;
  107. }
  108. }
  109.  
  110. //stampo la matrice con le sequenze richieste
  111. for(i=1; i<m;i++){
  112. printf("%d",matrice[i*length]);
  113.  
  114. for( j=1; j<length;j++){
  115. printf(" %d",matrice[i*length+j]);
  116. }
  117. printf("\n");
  118. }
  119.  
  120. return 0;
  121.  
  122. }
Success #stdin #stdout 0s 5288KB
stdin
Standard input is empty
stdout
0