[ proka_92 @ 13.02.2010. 15:17 ] @
Definišemo funkciju f(n) kao sumu cifara prirodnog broja n. U datom celobrojnom intervalu [ A, B ] naći broj k koji se najviše puta pojavljuje u nizu f(A), f(A + 1), f(A + 2), ..., f(B - 1), f(B). U slučaju da postoji više takvih brojeva k, ispisati onaj najveći. INPUT: U prvom redu se nalaze prirodni brojevi A i B (1 <= A <= B <= 10.000.000). OUTPUT: U prvom i jedinom redu ispisati broj k koji predstavlja vrednost objašnjenju u postavci zadatka. Izvor: www.z-trening.com Ja sam odradio ovako, ali mi 3 testa ne prolaze vremenski: Code: #include <stdio.h> int f(long n){ if(n!=0) return (n%10+f(n/10)); //probao sam i slucaj kada funkcija nije rekurzivna else return 0;} int maxniza(int a[],int n){ int i,max=a[0],maxpoz=0; for(i=1;i<n;i++) if((a[i]>=max) && (i>maxpoz)){ max=a[i]; maxpoz=i;} return maxpoz;} main(){ long A,B; int x[64],i,s,max; scanf("%ld%ld",&A,&B); for(i=0;i<63;i++) x[i]=0; for(A;A<=B;A++){ s=f(A); x[s]++;} max=maxniza(x,64); printf("%d",max); return 0; } [Ovu poruku je menjao proka_92 dana 13.02.2010. u 19:40 GMT+1] |