fork download
  1. public class Main
  2. {
  3. static final int elementos = 10;
  4. static final int[][] grupos = {{1,2}, {2,2}};
  5.  
  6. static final char ELEMENTO_SELECCIONADO = 'X';
  7. static final char ELEMENTO_NO_SELECCIONADO = 'O';
  8.  
  9. static int numCombinacion = 0;
  10. static int numGrupos = 0;
  11.  
  12. public static void main(String[] args)
  13. {
  14. int numElem = 0;
  15. int[] combinacion = null;
  16.  
  17. for(int i = 0; i < grupos.length; i++)
  18. {
  19. numElem += grupos[i][0] * grupos[i][1];
  20. numGrupos += grupos[i][1];
  21. }
  22.  
  23. if(numElem != 0 && numGrupos <= elementos - numElem + 1)
  24. {
  25. combinacion = new int[elementos - numElem + 1];
  26. UbicarGrupo(combinacion, 0, 1, 0);
  27. }
  28. else if(numElem == 0)
  29. {
  30. combinacion = new int[elementos];
  31. Imprimir(combinacion);
  32. }
  33. else
  34. {
  35. System.out.println("No hay combinaciones posibles");
  36. }
  37. }
  38.  
  39. public static void UbicarGrupo(int[] vector, int indiceCardinalidad, int indiceGrupo, int posicion)
  40. {
  41. if(indiceCardinalidad == grupos.length - 1 && indiceGrupo == grupos[indiceCardinalidad][1])
  42. {
  43. for(int i = posicion; i < vector.length; i++)
  44. {
  45. if(vector[i] == 0)
  46. {
  47. vector[i] = grupos[indiceCardinalidad][0];
  48. Imprimir(vector);
  49. vector[i] = 0;
  50. }
  51. }
  52. }
  53. else if(indiceCardinalidad != grupos.length - 1 && indiceGrupo == grupos[indiceCardinalidad][1])
  54. {
  55. for(int i = posicion; i < vector.length; i++)
  56. {
  57. if(vector[i] == 0)
  58. {
  59. vector[i] = grupos[indiceCardinalidad][0];
  60. UbicarGrupo(vector, indiceCardinalidad + 1, 1, 0);
  61. vector[i] = 0;
  62. }
  63. }
  64. }
  65. else
  66. {
  67. for(int i = posicion; i < vector.length; i++)
  68. {
  69. if(vector[i] == 0)
  70. {
  71. vector[i] = grupos[indiceCardinalidad][0];
  72. UbicarGrupo(vector, indiceCardinalidad, indiceGrupo + 1, i + 1);
  73. vector[i] = 0;
  74. }
  75. }
  76. }
  77. }
  78.  
  79. public static void Imprimir(int[] vector)
  80. {
  81. numCombinacion++;
  82. int gruposImpresos = 0;
  83.  
  84. System.out.print(numCombinacion + ":\t");
  85.  
  86. for(int i = 0; i < vector.length - 1; i++)
  87. System.out.print(vector[i] + "|");
  88.  
  89. System.out.print(vector[vector.length - 1] + "\t");
  90.  
  91. for(int i = 0; i < vector.length; i++)
  92. {
  93. if(vector[i] != 0)
  94. {
  95. gruposImpresos++;
  96.  
  97. for(int j = 1; j <= vector[i]; j++)
  98. System.out.print(ELEMENTO_SELECCIONADO);
  99.  
  100. if(gruposImpresos < numGrupos)
  101. System.out.print(ELEMENTO_NO_SELECCIONADO);
  102. }
  103. else
  104. System.out.print(ELEMENTO_NO_SELECCIONADO);
  105. }
  106.  
  107. if(EsVectorSimetrico(vector))
  108. System.out.println(" S");
  109. else
  110. System.out.println();
  111. }
  112.  
  113. public static boolean EsVectorSimetrico(int[] vector)
  114. {
  115. boolean esSimetrico = true;
  116.  
  117. for(int i = 0; i < vector.length / 2 && esSimetrico; i++)
  118. esSimetrico = vector[i] == vector[vector.length - (i + 1)];
  119.  
  120. return esSimetrico;
  121. }
  122. }
Success #stdin #stdout 0.14s 56104KB
stdin
45
stdout
1:	1|1|2|2|0	XOXOXXOXXO
2:	1|1|2|0|2	XOXOXXOOXX
3:	1|1|0|2|2	XOXOOXXOXX
4:	1|2|1|2|0	XOXXOXOXXO
5:	1|2|1|0|2	XOXXOXOOXX
6:	1|0|1|2|2	XOOXOXXOXX
7:	1|2|2|1|0	XOXXOXXOXO
8:	1|2|0|1|2	XOXXOOXOXX
9:	1|0|2|1|2	XOOXXOXOXX
10:	1|2|2|0|1	XOXXOXXOOX
11:	1|2|0|2|1	XOXXOOXXOX S
12:	1|0|2|2|1	XOOXXOXXOX
13:	2|1|1|2|0	XXOXOXOXXO
14:	2|1|1|0|2	XXOXOXOOXX
15:	0|1|1|2|2	OXOXOXXOXX
16:	2|1|2|1|0	XXOXOXXOXO
17:	2|1|0|1|2	XXOXOOXOXX S
18:	0|1|2|1|2	OXOXXOXOXX
19:	2|1|2|0|1	XXOXOXXOOX
20:	2|1|0|2|1	XXOXOOXXOX
21:	0|1|2|2|1	OXOXXOXXOX
22:	2|2|1|1|0	XXOXXOXOXO
23:	2|0|1|1|2	XXOOXOXOXX
24:	0|2|1|1|2	OXXOXOXOXX
25:	2|2|1|0|1	XXOXXOXOOX
26:	2|0|1|2|1	XXOOXOXXOX
27:	0|2|1|2|1	OXXOXOXXOX
28:	2|2|0|1|1	XXOXXOOXOX
29:	2|0|2|1|1	XXOOXXOXOX
30:	0|2|2|1|1	OXXOXXOXOX