Contador de Zeros e Uns [ajuda] - C - Portugal-a-Programar
Contador de Zeros e Uns [ajuda]
By calvin, October 13, 2013 in C
Boa noite preciso de ajuda com este enunciado que me anda a dar a volta a cabeça.
Contador de Uns e Zeros
Fazerum algoritmo que leia um valor numérico apenas constituído por zeros e/ou uns.
O programa deve determinar quantos zeros e quantos uns esse valor possui.
Exemplo do algoritmo ao ser executado:
Introduza um número (Unicamente 0's e 1's):
Tem 3 zeros e 3 uns.
O que consegui fazer ate agora foi contar todos os digitos como podem ver:
int contadigitos = 0, valor;
while(valor!=0)
contadigitos=contadigitos+1;
printf("Numero de digitos: %d\n", contadigitos);
Não seria mais simples leres o número como uma string para um buffer temporário? Depois, com a ajuda de um ciclo for, iterar por todos os dígitos do número (caracteres da string) e ir aumentando os contadores de um e zero, quando aparecesse cada um.
Lá por estar a dizer no enunciado "ler um número" não quer dizer que o tipo de dados de entrada seja numérico. Neste caso deverá ser uma string, como o @pwseo indicou. Torna-se deveras mais simples.
na realidade a complexidade e número de linhas na resolução de uma forma ou outra é exactamente a mesma.
desculpa, é mais complicado a solução com string porque é necessário descartar os zeros iniciais.
a única vantagem do uso do método da string é o limite de número de dígitos que se pode usar/ler.
// com leitura de um número
// contar
// com leitura de string
/* complexidade extra para ignorar os caracteres zeros iniciais */
while (string[i] == '0')
edit : correcção da estúpidez do copy-paste no segundo exemplo onde tinha "i /= 10" em vez do agora "i++"
Edited October 13, 2013 by HappyHippyHippo
Agora baralharam me todo qual é a opção mais facil?
Strings ou números?
tipo a unica coisa era saber como conto os 1 e os zeros e descratar os zeros iniciais... pois a unica coisa que consegui fazer foi contar todos os numeros -.-
Tens razão, não tinha sequer reparado que os zeros iniciais eram descartados, e como o OP não se pronunciou sobre o tipo de números que serão introduzidos (números binários facilmente têm imensos dígitos), não vale a pena considerarmos limitações relativas ao número de dígitos a ler, pelo menos para já.
À medida que divides um número por 10, ficas com o seu resto... e ali o resto será sempre 0 ou 1 (porque só tens 0s e 1s). Isso chega para conseguires contar.