c-priklad prvre vacsie sumerne cislo od zadaneho cisla
Ahoj ako uz nadpis napoveda ide o program ktory po zadani lubovolneho cisla (do 10 cifier) najde prve vacsie sumerne cislo od zadaneho teda ja napr. zadam 1440 a napise mi to 1441. Neviete kde mozem mat chybu mam do odovzdania zadania malo casu a dnes mi to nejako nemysli prosim poradte
#include <stdio.h>
#include <stdlib.h>
#include "skola.h"
//Vytvorte program, ktorý po zadaní prirodzeného èísla "n" nájde prvé, od neho väèšie "súmerné" èíslo,
//t.j. èíslo, ktoré je z obidvoch strán (spredu aj zozadu ) rovnaké!
//Napr. pre n=144 je súmerné èíslo 151
int main()
{
const int MAX=999999;
const int POCET=10;
int cifry_pole[POCET];
int cislo=0;
int vacsie_cislo=0;
int cifry=0;
int i=0;
printf("Zadaj prirodzene cislo maximalne 10 ciferne: ");
scanf("%d",&cislo);
vacsie_cislo=cislo;
while(vacsie_cislo<MAX)
{
vacsie_cislo++;
for(i=0;vacsie_cislo>0;i++,cifry++)
{
cifry_pole[i]=vacsie_cislo%10;
vacsie_cislo/=10;
printf("%d\n",cifry_pole[i]);
}
for(i=0;i>cifry;i++,cifry--)
{
if(cifry_pole[i]==cifry_pole[cifry])
{
printf("Vacsie sumerne cislo od zadaneho je: %d",vacsie_cislo);
return 0;
}
}
}
return 0;
}
No uz to vyzera lepsie ked dam 120 tak mi to 121 najde :D ale pri takych dalej od vysledku to hlada a hlada
while(delitel>0)
{
cifry[++i]=delitel%10;
delitel/=10;
}
- neinicializoval si i (pre dalsie prechody cyklom!). A ta inicializacia na -1 je tiez dementna. Normalne sa to robi
i=0;
while(delitel>0)
{
cifry[i++]=delitel%10;
delitel/=10;
}
ja kedze som spravne lenivy by som to napisal takto:
for(i=0; delitel>0; delitel/=10)
cifry[i++]=delitel%10;
P.S. a potom samozrejme zmenit vsetky nasledne testy oproti i, z <=i na <i, a priradenie k=i-1 pretoze tak je to logicke v C (0-based index) a i je pocet cifier.
a to "j<=i/2" musi ostat ako <= pretoze to musi ist az po prostrednu cifru ak je pocet cifier neparny.
P.S. resp. sorry je to jedno, prostredna cifra sa porovnava sama so sebou :)
ok spravil som to podla teba ako si napisal poskusal som zjednodusil printf dal prec no ostalo mi toto ale stale tam je ta vada :D 120 mi ide ale napr 149 nic
A este aj v tom
for(i=0; delitel<0; delitel/=10)
mas to delitel<0 naopak. Ja som pisal delitel>0
uz viem kde je chyba tie cifry tam sa uklada cim dalej tym viac prvkov pola. ako spravim aby som cele pole vynuloval ako na zaciatku na konci cyklu while??
Si tie moje zmeny asi vobec neskompiloval. To bol tvoj povodny problem s i.
Ano mas pravdu i som tam nakonci cyklu zabudol dat na povodnu hodnotu aj ten vysledok bol treba tak dat. Uz som tie tvoje rady do toho projektu aplikoval :) dakujem moc za pomoc vsetko ide ako ma.
Len tam radsej nechaj to tvoje while namiesto mojho for, lebo ucitel to moje for nemusi pochopit
V podstate mozes zobrat tvoj povodny program z dotazu, a opravit len to co pisal wikan, a potom len pridat 2 riadky na spravne miesta v cykle alebo na zaciatok cyklu
i = -1;
vysledok = ANO;
a musi to fungovat tiez.
P.S. aha sorry ne, v dotaze si toho mal blbo viac. Nechaj to uz tak. Pripadne zmen to moje for zas na tvoje while
V Javě to jde celkem rychle:
já bych to řešil textově.
rozdělit podle počtu číslic na sudá a lichá. U lichých "vynechat" prostřední a v obráceném gardu sepsat číslice zleva doprava. V podstatě jeden if a pak už jen otročina.
obecně:
edit: místo IFu se dá použít dělení reálných čísel a zaokrouhlení.
edit2: nepochopil jsem zadání. ignorujte.
"Trochu" efektívnejšia verzia:
Omg. Nějak moc ḱódu, né?