先将两个字符串位置相同且大小相等的数字全都换成字母‘x’,(为什么要先剔除大小相等的呢,例如例子 01123,11100 )在用哈希表收集secret中每个字母的个数,遍历guess字符串,若发现guess的数字在secret中存在,那么肯定是位置不同的了(因为位置相同且大小相等的已经换成‘x‘了,将B自增以下,并且把哈希表中该字母的个数自减一下),如此一来,便统计除了A和B的数目。
要学会使用sprintf 等字符串与字母相互转换的函数。
C代码如下:
char * getHint(char * secret, char * guess){ int a=0; int b=0; int h[150]; char *s1=(char*)malloc(sizeof(char)*10); char *s2=(char*)malloc(sizeof(char)*10); for (int i=0;i<150;i++) h[i]=0; for(int i=0;guess[i]!=‘\0‘;i++) { if(secret[i]==guess[i]) { a++; secret[i]=guess[i]=‘x‘; } } for(int i=0;secret[i]!=‘\0‘;i++) { h[secret[i]]++; } for(int i=0;guess[i]!=‘\0‘;i++) { if(h[guess[i]]>0&&guess[i]!=‘x‘) { b++; h[guess[i]]--; } } sprintf(s1, "%d", a); sprintf(s2, "%d", b); s1=strcat(s1,"A"); s2=strcat(s2,"B"); s1=strcat(s1,s2); return s1; }
原文地址:https://www.cnblogs.com/wzmm/p/12431654.html
时间: 2024-11-09 08:01:42