/*********************************************************** * Created: Wed 24 Oct 2018 10:05:18 AM -02 * * Author: Carla N. Lintzmayer, carla.negri@ufabc.edu.br * ***********************************************************/ #include /* multiplica a por b sem usar '*' */ int multiplica(int a, int b) { if (b == 0) return 0; return multiplica(a, b-1) + a; } /* testa de vet1 eh permutacao de vet2 */ int eh_permutacao(int vet1[], int n1, int vet2[], int n2) { int i, j; int cont = 0; if (n1 != n2) return 0; for (i = 0; i < n1; i++) { /* procurar se vet1[i] esta no outro vetor */ for (j = 0; j < n2; j++) { if (vet1[i] == vet2[j]) { vet2[j] = -1; cont++; /* para de procurar, para nao encontrar outros valores iguais */ break; } } } /* forma 1 de testar: */ if (cont == n1) return 1; return 0; /* forma 2 de testar: */ for (i = 0; i < n2; i++) { if (vet2[i] != -1) return 0; } return 1; } /* retorna 1 se x esta em vet e 0 caso contrario */ int busca(int vet[], int ini, int fim, int x) { /* int i; for (i = 0; i < n; i++) { if (vet[i] == x) return i; } return -1; */ if (ini > fim) return 0; if (vet[fim] == x) return 1; if (vet[ini] == x) return 1; return busca(vet, ini+1, fim-1, x); } /* retorna 1 se x esta em vet e 0 caso contrario */ int busca2(int vet[], int n, int x) { if (n == 0) return 0; if (vet[n-1] == x) return 1; return busca2(vet, n-1, x); } /* preenche matriz jogo com * ou indicando bombas nos vizinhos */ void campo_minado(int mapa[][100], int n, int m, int jogo[][100]) { int i, j; for (i = 0; i < n; i++) { for (j = 0; j < m; j++) { if (mapa[i][j] == 1) { jogo[i][j] = '*'; if (i > 0 && jogo[i-1][j] != '*') jogo[i-1][j]++; if (i < n-1 && jogo[i+1][j] != '*') jogo[i+1][j]++; if (j > 0 && jogo[i][j-1] != '*') jogo[i][j-1]++; if (j < m-1 && jogo[i][j+1] != '*') jogo[i][j+1]++; } } } } /* explode bomba na posicao (x,y) e eventuais bombas que estiverem no caminho */ void bomba(char mapa[][50], int n, int m, int x, int y) { int raio = mapa[x][y] - '0'; int i, j; mapa[x][y] = 'B'; for (i = x-raio; i <= x+raio; i++) { if (i >= 0 && i < n) { for (j = y-raio; j <= y+raio; j++) { if (j >= 0 && j < m) { if ('1' <= mapa[i][j] && mapa[i][j] <= '9') bomba(mapa, n, m, i, j); if (mapa[i][j] != 'B') mapa[i][j] = 'x'; } } } } } /* remove textos dentro de (* e *) */ void altera_texto(void) { char string[81]; int tamanhoString = 0; int tamanhoStringNova = 0; int i; fgets(string, 81, stdin); /* Calculando tamanho, desconsiderando o \n: */ for (i = 0; string[i] != '\n' && string[i] != '\0'; i++) tamanhoString++; /* Imprimir a string original sem os caracteres de marcacao: */ for (i = 0; i < tamanhoString; i++) { if (string[i] != '(' && string[i] != '*' && string[i] != ')') { printf("%c", string[i]); } } printf("\n"); /* Imprime a string nova, sem os caracteres dentro da marcacao: */ for (i = 0; i < tamanhoString; i++) { if (string[i] == '(') { /* Pelo enunciado o proximo caractere deve ser um "*" */ i += 2; /* Desconsidera-se todo texto entre os marcardores (* e *): */ while (string[i] != ')') i++; } else { tamanhoStringNova++; printf("%c", string[i]); } } printf("\n%d\n", tamanhoStringNova); } /* troca elemento na posicao i com o da posicao j */ void troca(char palavra[], int i, int j) { char aux = palavra[i]; palavra[i] = palavra[j]; palavra[j] = aux; } /* gera todas as permutacoes cujos simbolos estao em 'palavra' */ void permutacoes(char palavra[], int n) { int i; if (n == 0) printf("%s\n", palavra); for (i = 0; i < n; i++) { troca(palavra, i, n-1); permutacoes(palavra, n-1); troca(palavra, n-1, i); } } int main() { char str[] = "abc"; permutacoes(str, 3); return 0; }