Uma sequência de n > 0 números inteiros é chamada de cheia se os valores absolutos das diferenças entre os elementos consecutivos representam todos os possíveis valores entre 1 e n - 1.
Exemplo: 1 4 2 3 é uma sequência cheia, porque os valores absolutos das diferenças entre seus elementos consecutivos são 3, 2 e 1, respectivamente.
Observe que esta definição implica que qualquer sequência contendo exatamente um número inteiro é uma sequência cheia.
(a) Escreva uma função com a seguinte interface:
int uns(int n, int cont[MAX])
Que receba um número inteiro n e um vetor de números inteiros com n elementos, e devolva 1 se cada elemento do vetor é igual a 1. Caso contrário, a função devolve 0.
(b) Escreva um programa que receba um número inteiro k > 0 que representa a o número de casos de teste. Para cada caso de teste, receba um número nteiro n > 0 e uma sequência de n números inteiros, com 1 <=n <= 100, e verifique se a sequência é cheia ou não. Em caso positivo, imprima C para essa entrada. Caso contrário, imprima N . Use a função do item (a)
int uns(int n, int cont[MAX]) {
int i;// Contador
for(i=0; i if(cont[i]!=1)// Se o elemento não for 1 return 0;// Devolve 0 return 1;// Caso todos sejam 1, devolve 1
(b) O programa abaixo, devidamente comentado, faz o que se pede:
#include
#define MAX 100// n máximo
int abs(int x) {// Função módulo inteiro
return x<0 ? -x : x;
int main() {// Função principal
int k;// Número de casos de teste
int i;// Contador
int n;// Número de elementos
int pronto;// Resposta encontrada?
int a,b;// os dois valores correntes da sequência
int freq[MAX];// Frequência das diferenças
scanf(" %d", &k);// Lê k
while(k-->0) {// Enquanto k for positivo
pronto = 0;// Resposta não encontrada
scanf(" %d", &n);// Lê n
scanf(" %d", &a);// Lê o primeiro elemento
for(i=1; i freq[i] = 0;// Limpa aa frequencia equivalente for(i=1; i int d;// Diferença scanf(" %d", &b);// Lê elemento if(pronto)// Se resposta encontrada continue; d = abs(a-b);// Diferença if(d>n-1 || d==0) { // Se diferença for inválida printf("N\n"); pronto = 1;// Resposta encontrada continue; freq[d] += 1// Aumenta 1 na frequência if(!pronto)// Se resposta ainda não encontrada if(uns(n-1,freq))// Se somente uns printf("C\n");// Cheio else// Senão printf("N\n");// Não return 0;// Finaliza o programa
Para escrever sua resposta aqui, entre ou crie uma conta.
Algoritmos e Programação C++
•UFMS
Compartilhar