char a[]="abcd";
char b[]="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
char c[]="bbbbbbbbbbbbbbbbbbbbbbbbb";

unsigned short aa=hash(a);
unsigned short bb=hash(b);
unsigned short cc=hash(c);



任意の文字列に対応した数を(0〜0xFFFFの範囲で)得る関数 hash() を書け
例:
unsigned short hash(char* s)
{
unsigned short a=0;

int i=0;
while (s[i]!='\0') {
a+=(unsigned short)s[i];
i++;
}

return(a);
}

これだと hash("abc") と hash("aad")が同じ数になる。 なるべく数の重複は避けたい。
処理が高速で、かつ、数の重複が起きにくくなるように上記の関数を書き直せ