Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.
Nástěnka
❗22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
❗04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
❗23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.
Nejste přihlášen(a). Přihlásit

Zdravím,
zkus si to číslo hodit na řetězec (pomocí itoa, nebo (já podobné věci dělám) pomocí sprintf), a testuj v cyklu ASCII hodnotu (když se podíváš na ASCII tabulku, tak víš, že číslice mají reprezentaci od 48 do 57, kde 48 = '0' a 57 = '9'), a v tom samém cyklu si přičítej, co potřebuješ (testuj zda číslice není větší než zatím největší nalezená, inkrementuj čítač číslic, jak je ctěná libost).
Tedy, taková ochutnávka:
#include <stdio.h>
int main()
{
unsigned long cislo = 11546212; // to jsem si vymyslel, misto toho si napis treba logiku vstupu od uzivatele
char cisloJakoRetezec[11] = {'\0'}; // dej majzla, at mas to pole dost velky, pokud pouzijes nejvetsi ("bezny") celociselny typ unsigned long, tak vis, ze jeho maximum je neco pres 4 miliardy, tedy deset cislic, pole o 11 prvcich tedy bude stacit
sprintf(cisloJakoRetezec, "%d", cislo);
int citacJednicek, citacDvojek = 0;
char nejvetsiCisliceASCII = 0;
for(int i = 0; i < 11; i++)
{
if(cisloJakoRetezec[i] = '1') citacJednicek++;
if(cisloJakoRetezec[i] > nejvetsiCisliceASCII) nejvetsiCisliceASCII = cisloJakoRetezec[i];
// dalsi logika, co s tim potrebujes
}
int nejvetsiCislice = atoi(nejvetsiCisliceASCII);
printf("V zadanem cisle se nachazi %d jednicek, %d dvojek a nejvetsi cislice je cislice %d", citacJednicek, citacDvojek, nejvetsiCislice);
return 0;
}Postačuje tak? Děkuji
Offline
↑ frank_horrigan:
Nebo lze vyuzit deleni modulo 10ti a celociselne deleni 10ti... coz povazuju za cistci reseni nez vyuziti sprintf pro konverzi do retezce a zpetne urcovani cislice podle znaku.
Kod muze vypadat napr. takto
#include <stdio.h>
#include <string.h>
int main(int argc, char **argv)
{
if(argc != 2){
fprintf(stderr, "Usage: %s <cislo>\n", argv[0]);
return 1;
}
unsigned long cislo = atoi(argv[1]);
unsigned char cetnost[10];
unsigned char cislice;
memset(cetnost, 0, sizeof(cetnost));
do {
cislice = cislo % 10;
cislo /= 10;
cetnost[cislice]++;
}
while(cislo);
int i;
for(i=0;i<=9;i++){
printf("Cetnost cislice %d: %d\n", i, cetnost[i]);
}
return 0;
}Offline