C, 775 771 자
char*e[]={"h","he","li","be","b","c","n","o","f","ne","na","mg","al","si","p","s","cl","ar","k","ca","sc","ti","v","cr","mn","fe","co","ni","cu","zn","ga","ge","as","se","br","kr","rb","sr","y","zr","nb","mo","tc","ru","rh","pd","ag","cd","in","sn","sb","te","i","xe","cs","ba","la","ce","pr","nd","pm","sm","eu","gd","tb","dy","ho","er","tm","yb","lu","hf","ta","w","re","os","ir","pt","au","hg","tl","pb","bi","po","at","rn","fr","ra","ac","th","pa","u","np","pu","am","cm","bk","cf","es","fm","md","no","lr","rf","db","sg","bh","hs","mt","ds","rg","cn","uut","fl","uup","lv","uus","uu",0};
b[99],n;
c(w,o,l)char*w,*o,**l;{
return!*w||!strncmp(*l,w,n=strlen(*l))&&c(w+n,o+sprintf(o,",%d",l-e+1),e)||*++l&&c(w,o,l);
}
main(){
while(gets(b))c(b,b+9,e)&&printf("%s%s\n",b,b+9);
}
입력 : 줄당 단어는 소문자 여야합니다. usr/share/dict/words괜찮습니다.
출력 : 단어 및 숫자, 예 :acceptances,89,58,15,73,7,6,99
논리 : 요소로 시작
c(w,o,l)하여 단어를 확인합니다 .
양방향 재귀가 사용됩니다. 첫 번째 요소가 요소 목록의 헤드와 일치하면 나머지를 전체 요소 목록 과 비교하십시오. 일치하지 않으면 목록의 꼬리와 단어를 비교하십시오.
버퍼 는 성공적인 경로를 따라 요소 번호를 누적합니다. 일치 후 숫자 목록이 포함되어 인쇄됩니다.wl
w
o
문제 :
- 너무 많은 목록을 효율적으로 인코딩되지 않은 "및 ,"그러나이 방법은 사용하기 쉽고 확실 훨씬 코드에 너무 많은 비용을 들이지 않고, 개선 될 수 있어요...