fork download
  1. #include <iostream>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. int main()
  5. {
  6. int m[3][50], s[3][3], a=2, b=2, c=23, i=0, j=0, l=0, q=0, ucp=0, dep=0, p=0, k=0, r=0, t=0, w=0, soglia=100, dim=30;
  7. for(i=0;i<3;i++) //riempio di zeri la matrice m
  8. {
  9. for(j=0;j<50;j++)
  10. {
  11. m[i][j]=0;
  12. }
  13. }
  14. i=0;
  15. j=0;
  16. m[0][0]=a;
  17. m[1][0]=b;
  18. m[2][0]=c;
  19. while((m[0][i]<=soglia)&&(m[1][i]<=soglia)&&(m[2][i]<soglia)&&(ucp<dim))
  20. {
  21. if ((m[0][i]==0)&&(m[1][i]==0)&&(m[2][i]==0)) break;
  22. s[0][0]=m[0][i];
  23. s[1][0]=m[1][i];
  24. s[2][0]=m[0][i]*m[1][i]-m[2][i];
  25. s[0][1]=m[1][i];
  26. s[1][1]=m[2][i];
  27. s[2][1]=m[1][i]*m[2][i]-m[0][i];
  28. s[0][2]=m[2][i];
  29. s[1][2]=m[0][i];
  30. s[2][2]=m[2][i]*m[0][i]-m[1][i];
  31. for(j=0;j<3;j++) //calcolo le prime terne trasformate e le ordino
  32. {
  33. for(l=1;l<3;l++)
  34. {
  35. p=l;
  36. while((p>0)&&(s[p][j]<s[p-1][j]))
  37. {
  38. dep=s[p][j];
  39. s[p][j]=s[p-1][j];
  40. s[p-1][j]=dep;
  41. p--;
  42. }
  43. }
  44. }
  45. //printf("\n");
  46. //for(k=0;k<3;k++)
  47. //{
  48. // printf("\n");
  49. // for(t=0;t<3;t++)
  50. // {
  51. // printf("\t \t \t %d", s[k][t]);
  52. // }
  53. //}
  54. //printf("\n");
  55. for(j=0;j<3;j++) //seleziono una colonna di s (cioè una terna) E QUI SUCCEDE IL CASINO
  56. {
  57. if((s[0][j]<=0)||(s[1][j]<=0)||(s[2][j]<=0)) {
  58. q=1;
  59. //printf("\n nella terna c'è uno 0");
  60. //printf("\n %d", j);
  61. }
  62. else q=0;
  63. if(q==0) {
  64. //printf("\n PROPRIO LUI! CCEZIONALE!");
  65. if((s[0][j]>soglia)||(s[1][j]>soglia)||(s[2][j]>soglia)) r=3;
  66. else {
  67. for(l=0;l<=ucp;l++) //devo confrontarla con tutte le terne già memorizzate nelle colonne di m
  68. {
  69. r=0;
  70. for(k=0;k<3;k++) //scorro contemporaneamente le righe di s e m (fissata via via la colonna)
  71. {
  72. if (s[k][j]==m[k][l]) r=r+1;
  73. }
  74. if(r==3) break;
  75. }
  76. }
  77. //printf("\t \t \t %d", r);
  78. if (r!=3) { // aggiungo
  79. //printf("\n");
  80. ucp=ucp+1;
  81. for(q=0;q<3;q++)
  82. {
  83. m[q][ucp]=s[q][j];
  84. }
  85. for(w=0;w<3;w++) //stampo di nuovo m (cosa che vorrei evitare)
  86. {
  87. //printf("\n");
  88. for(t=0;t<dim;t++)
  89. {
  90. //printf("\t %d", m[w][t]); // perchè se NON faccio stampare non si vede nulla???
  91. }
  92. }
  93. }
  94.  
  95.  
  96. }
  97. q=0;
  98. }
  99. i=i+1;
  100. }
  101. //printf("\n \n il puntatore è a %d", i);
  102.  
  103. printf("\n"); // stampo le terne nell'ordine in cui le ho trovate
  104. i=0;
  105. while(m[0][i]!=0)
  106. {
  107. printf("\n");
  108. for(j=0;j<3;j++)
  109. {
  110. printf("\t %d", m[j][i]);
  111. }
  112. i=i+1;
  113. }
  114.  
  115.  
  116. l=1; // ordino rispetto al primo numero
  117. while(m[0][l]!=0)
  118. {
  119. p=l;
  120. while((p>0)&&(m[0][p]<m[0][p-1]))
  121. {
  122. for(q=0;q<3;q++)
  123. {
  124. dep=m[q][p];
  125. m[q][p]=m[q][p-1];
  126. m[q][p-1]=dep;
  127. }
  128. p=p-1;
  129. }
  130. l=l+1;
  131. }
  132.  
  133.  
  134. l=1; // ordino rispetto al secondo numero
  135. while(m[1][l]!=0)
  136. {
  137. p=l;
  138. while((p>0)&&(m[1][p]<m[1][p-1])&&(m[0][p]<=m[0][p-1]))
  139. {
  140. for(q=0;q<3;q++)
  141. {
  142. dep=m[q][p];
  143. m[q][p]=m[q][p-1];
  144. m[q][p-1]=dep;
  145. }
  146. p=p-1;
  147. }
  148. l=l+1;
  149. }
  150.  
  151.  
  152. l=1; // ordino rispetto al terzo numero
  153. while(m[2][l]!=0)
  154. {
  155. p=l;
  156. while((p>0)&&(m[2][p]<m[2][p-1])&&(m[1][p]<=m[1][p-1])&&(m[0][p]<=m[0][p-1]))
  157. {
  158. for(q=0;q<3;q++)
  159. {
  160. dep=m[q][p];
  161. m[q][p]=m[q][p-1];
  162. m[q][p-1]=dep;
  163. }
  164. p=p-1;
  165. }
  166. l=l+1;
  167. }
  168.  
  169.  
  170. printf("\n"); // stampo le terne ordinate
  171. i=0;
  172. while(m[0][i]!=0)
  173. {
  174. printf("\n");
  175. for(j=0;j<3;j++)
  176. {
  177. printf("\t %d", m[j][i]);
  178. }
  179. i=i+1;
  180. }
  181. return(0);
  182. }
Success #stdin #stdout 0s 3460KB
stdin
Standard input is empty
stdout

	 2	 2	 23
	 2	 23	 44
	 2	 44	 65
	 2	 65	 86

	 2	 2	 23
	 2	 23	 44
	 2	 44	 65
	 2	 65	 86