PKU2247

先日のコメント欄でのOzyさんの指摘によって幾ばくか短縮が出来ました。

s[6000],i,j=4,A[4];
t(n){return""[n]*s[A[n]];}
main(k){
	for(*s=1;++i<6e3;){
		while(j--)k=t(j)<t(k)?j:k;
		for(s[i]=t(k);++j<4;)A[j]+=t(j)==s[i];
	}
	for(;scanf("%d",&i),i;
		printf("The %d%s humble number is %d.\n",
			i,i/10%10-1?~j?j?j-1?
			"th":"rd":"nd":"st":"th",
			s[i-1])
		)j=i%10-2;
}

ついでに小手先の技も駆使してちょびっと短縮。
長いコードだと、どこでも削れそうな気がしてコードだけじゃなくて、精神も削れるw