/* Desenvolvido por Adriano Rocha Pereira */ /* e-mail: maxprimenumber@gmail.com */ /* Home Page: http://br.geocities.com/arpmaxprimenumber */ /* Desenvolvido entre os dias 22 e 25 de maio de 2005 */ /* Nao me preocupei com a programacao preventiva! */ /* Também não utilizei o conceito de função na programação */ /* de modo a evitar a "repetição" do código (mas isto é apenas */ /* "artigo de perfumaria", hehehe, facilmente moldável). */ /* O que importa e o funcional para saciar a curiosidade. */ /* CIARP := Centro de Inteligência ARP */ /* O "progarpmoeda" guarda em sua memória as sequências novas distintas, */ /* possibilitando, assim, após aplicado o movimento A ou B, a eliminação de */ /* sequências (que computam um total de 10, já que o movimento é aplicado a */ /* partir de cada uma das 10 moedas disponibilizadas em círculo) vindouras repetidas. */ #include #define MAX 13 #define MAX1 1100 int main () { int i, j, k, e, apliq; int m, n, c, d, f, p, t, g, h, z, x, r, s, o, l, u, seqigual; int a[MAX], b[MAX], org[MAX1]; int vet[MAX1][MAX]; for (i = 0; i <= 9; i++) vet[0][i] = 1; m = 1; e = 1; while (e) { printf("\n"); printf(" ProgRAma Moeda \n"); printf(" (desenvolvido pelo CIARP) \n"); printf("\n"); printf("A sequencia e: a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 \n"); printf("\n"); printf("a1, a2, ..., a10 so podem assumir os valores `0` ou `1`. Imagine que a1, a2, ..., "); printf("a10 estao ao redor de uma circunferencia, portanto a1 esta ao lado de a10. "); printf("\n"); printf("Note que as sequencias a seguir possuem a mesma disposicao(pois estao dispostas "); printf("ao redor de uma circunferencia): 1100011001, 1000110011, 0001100111, 0011001110."); printf("\n"); printf("Movimento A: trocar quatro numeros consecutivos da sequencia. \n"); printf("Movimento B: trocar cinco numeros consecutivos X X Y X X da sequencia, onde `X` deve ser "); printf("trocado e `Y` deve permanecer inalterado. \n"); printf("\n"); printf("Tendo este programa em maos voce podera saber rapidamente, pensando de forma adequada, "); printf("todas as possiveis configuracoes a partir da aplicacao dos movimentos A e B. \n"); printf("\n"); printf("E possivel atraves de uma sequencia finita de movimentos A e B, tendo inicialmente a1 = a2 = "); printf("... = a10 = 1, obter a1 = a2 = ... = a10 = 0 ? \n"); printf("\n"); printf("Entre com os valores da sequencia para poder aplicar o movimento A ou B. \n"); printf("\n"); for (i = 0; i <= 9; i++) { printf("a%d = ", i+1); scanf("%d", &a[i]); printf("\n"); } printf("\n"); printf("A sequencia desejada e: "); for (i = 0; i <= 9; i++) printf("%d ", a[i]); printf("\n"); printf("\n"); printf("\n"); printf("Deseja aplicar qual movimento? Para A, digite `1`, para B, digite `2` "); scanf("%d", &apliq); printf("\n"); if (apliq == 1) { for (i = 0; i <= 6; i++) { for (j = 0; j <= 9; j++) b[j] = a[j]; for (j = 0; j <= 3; j++) if (a[i+j] == 0) b[i+j] = 1; else b[i+j] = 0; for (j = 0; j <= 9; j++) vet[m+i][j] = b[j]; } for (i = 7; i <= 9; i++) { for (j = 0; j <= 9; j++) b[j] = a[j]; for (j = 0; j <= i-7; j++) if (a[j] == 0) b[j] = 1; else b[j] = 0; for (j = i; j <= 9; j++) if (a[j] == 0) b[j] = 1; else b[j] = 0; for (j = 0; j <= 9; j++) vet[m+i][j] = b[j]; } h = 0; for (s = 0; s <= m+9; s++) { z = 1; for (g = 0; g < h; g++) if (s == org[g]) { g = h; z = 0; } for (r = s+1; r <= m+9 && z; r++) { u = 1; for (g = 0; g < h; g++) if (r == org[g]) { g = h; u = 0; } if (u) { // i = 0; t = 0; // for (j = 0; j <= 9; j++) { o = vet[r][j]; if (o == vet[s][i]) { i++; if (j == 9) if (t != 0) for (p = 0; p < t; p++) { l = vet[r][p]; if (l == vet[s][i]) { i++; if (p == t-1) seqigual = 1; } else { p = t; seqigual = 0; } } else seqigual = 1; } else { t++; if (i != 0) { j = j-i; i = 0; } if (j == 9) seqigual = 0; } } // if (seqigual != 1) { i = 0; t = 0; // for (j = 9; j >= 0; j--) { o = vet[r][j]; if (o == vet[s][i]) { i++; if (j == 0) if (t != 0) for (p = 9; p > 9-t; p--) { l = vet[r][p]; if (l == vet[s][i]) { i++; if (p == 10-t) seqigual = 1; } else { p = 9-t; seqigual = 0; } } else seqigual = 1; } else { t++; if (i != 0) { j = j+i; i = 0; } if (j == 0) seqigual = 0; } } // } if (seqigual) { org[h] = r; h++; } // } } } } else { for (i = 0; i <= 5; i++) { for (j = 0; j <= 9; j++) b[j] = a[j]; for (j = 0; j <= 4; j++) if (j != 2) if (a[i+j] == 0) b[i+j] = 1; else b[i+j] = 0; else ; for (j = 0; j <= 9; j++) vet[m+i][j] = b[j]; } for (i = 6; i <= 9; i++) { for (j = 0; j <= 9; j++) b[j] = a[j]; for (j = 0; j <= i-6; j++) if (i == 8) for (k = 1; k <= 2; k++) if (a[k] == 0) b[k] = 1; else b[k] = 0; else if (i == 9) for (k = 0; k <= 3; k++) if (k != 1) if (a[k] == 0) b[k] = 1; else b[k] = 0; else ; else if (a[j] == 0) b[j] = 1; else b[j] = 0; for (j = i; j <= 9; j++) if (j != i+2 ) if (a[j] == 0) b[j] = 1; else b[j] = 0; else ; for (j = 0; j <= 9; j++) vet[m+i][j] = b[j]; } h = 0; for (s = 0; s <= m+9; s++) { z = 1; for (g = 0; g < h; g++) if (s == org[g]) { g = h; z = 0; } for (r = s+1; r <= m+9 && z; r++) { u = 1; for (g = 0; g < h; g++) if (r == org[g]) { g = h; u = 0; } if (u) { // i = 0; t = 0; // for (j = 0; j <= 9; j++) { o = vet[r][j]; if (o == vet[s][i]) { i++; if (j == 9) if (t != 0) for (p = 0; p < t; p++) { l = vet[r][p]; if (l == vet[s][i]) { i++; if (p == t-1) seqigual = 1; } else { p = t; seqigual = 0; } } else seqigual = 1; } else { t++; if (i != 0) { j = j-i; i = 0; } if (j == 9) seqigual = 0; } } // if (seqigual != 1) { i = 0; t = 0; // for (j = 9; j >= 0; j--) { o = vet[r][j]; if (o == vet[s][i]) { i++; if (j == 0) if (t != 0) for (p = 9; p > 9-t; p--) { l = vet[r][p]; if (l == vet[s][i]) { i++; if (p == 10-t) seqigual = 1; } else { p = 9-t; seqigual = 0; } } else seqigual = 1; } else { t++; if (i != 0) { j = j+i; i = 0; } if (j == 0) seqigual = 0; } } // } if (seqigual) { org[h] = r; h++; } // } } } } x = 0; for (f = m; f <= m+9; f++) for (g = 0; g < h; g++) if (f == org[g]) g = h; else if (g == h-1) { for (c = 0; c <= 9; c++) vet[m+x][c] = vet[f][c]; x++; } m = m+x; printf("\n"); printf("Seguem as sequencias distintas ate entao (a partir do inicio do programa ate este exato instante): \n"); printf("\n"); for (d = 0; d < m; d++) { printf("Sequencia %d: ", d); for (n = 0; n <= 9; n++) printf("%d ", vet[d][n]); printf("\n"); } printf("\n"); printf("Digite o numero `1` e aperte ENTER para entrar com uma nova sequencia "); scanf("%d", &e); } return 0; }