Register
|
Login
Home
News
Competitions
Practice
How to
Rankings
Calendar
Arena
CodeFu 2010
CodeFu'10 Highlights
Jazoon'10 Highlights
Schedule
Rules
Prizes
Results
Competitions
»
Main CodeFu Competitons
»
CodeFu 2010
»
Results
CodeFu 2010 Results
Final Round Results
mangelovski's solution for 300: NumberSequence, written in Java, submitted on 09.05.2010 14:03:02
public class NumberSequence { public int findDigit(int N) { if (N==1) return 1; if (N==2) return 1; if (N==3) return 2; if (N==4) return 1; if (N==5) return 2; if (N==6) return 3; if (N==7) return 1; int next=3; int prev=2; int stack=4; int prevstack=-1; while(stack<N){ if(next<10){ prev=next; next++; prevstack=stack; stack+=prev; } else{ if(next<100){ prev=next; next++; prevstack=stack; stack+=9+2*(prev-9); }else{ if(next<1000) { prev=next; next++; prevstack=stack; stack+=9+2*(90)+3*(prev-99); } else{ if(next<1000){ prev=next; next++; prevstack=stack; stack+=9+2*(90)+3*(900)+4*(prev-999); } } } } } if(stack==N) return 1; N-=prevstack; if(N<9) return N+1; int tm=10; // System.out.println(prev); // System.out.println(prevstack); // System.out.println(N); for(int i=9;i<=N;i++){ int sec=tm; int size=Integer.toString(sec).length(); int tn=(int) (sec/Math.pow(10, size-1)); sec=(int) (sec%Math.pow(10, size-1)); if(i==N) return tn; while(sec>0){ size=Integer.toString(sec).length(); tn=(int) (sec%Math.pow(10, size-1)); sec=(int) (sec/Math.pow(10, size-1)); i++; } tm++; if(i==N) return 0; } return -1; } }