PKU2247
http://acm.pku.edu.cn/JudgeOnline/problem?id=2247
PKU2247でOzyさんがJavaでコードを書いています。
折角だからそれを素直にCに移植+適当短縮してみたり。
s[6000],i,j,A[4]; t(n){ return""[n]*s[A[n]];/* 文字列の中身は"\2\3\5\7" */ } main(k){ for(*s=1;++i<6e3;){ for(j=k=0;++j<4;) k=t(j)<t(k)?j:k; for(s[i]=t(k);j--;) A[j]+=t(j)==s[i]; } while(scanf("%d",&i),i) printf("The %d%s humble number is %d.\n",i, i/10%10-1?i%10-1?i%10-2?i%10-3? "th":"rd":"nd":"st":"th", s[i-1]); }