Solução: Problema das trocas - UFRJ (Filipe Teles)
From AdonaiMedrado.Pro.Br
#include <iostream> using namespace std; typedef struct Circulo { int valor; char pessoa; } circulo; int errado(circulo vetor[], int tamanho) { for (int i = 1; i < tamanho; i++) if (vetor[i-1].pessoa > vetor[i].pessoa) return 1; return 0; } int main() { int tamanho, entrada, j, cont; char insere, guarda; cin >> tamanho; while (tamanho) { circulo vetor[tamanho]; for (int i = 0; i < tamanho; i++) { cin >> entrada; vetor[i].valor = entrada; vetor[i].pessoa = 'A' + i; } cont = 0; j = 0; insere = 'A'; do { guarda = vetor[vetor[j].valor - 1].pessoa; for (int i = 0; i < tamanho; i++) { vetor[vetor[j].valor - 1].pessoa = insere; j = vetor[j].valor - 1; insere = guarda; guarda = vetor[vetor[j].valor - 1].pessoa; } cont++; } while (errado(vetor, tamanho)); cout << cont << endl; cin >> tamanho; } }