299猜数字游戏
你在和朋友一起玩 猜数字(Bulls and Cows)游戏,该游戏规则如下:
写出一个秘密数字,并请朋友猜这个数字是多少。朋友每猜测一次,你就会给他一个包含下述信息的提示:
猜测数字中有多少位属于数字和确切位置都猜对了(称为 “Bulls”,公牛),
有多少位属于数字猜对了但是位置不对(称为 “Cows”,奶牛)。也就是说,这次猜测中有多少位非公牛数字可以通过重新排列转换成公牛数字。
给你一个秘密数字 secret 和朋友猜测的数字 guess ,请你返回对朋友这次猜测的提示。
提示的格式为 “xAyB” ,x 是公牛个数, y 是奶牛个数,A 表示公牛,B 表示奶牛。
请注意秘密数字和朋友猜测的数字都可能含有重复数字。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/bulls-and-cows
提示:
1 <= secret.length, guess.length <= 1000
secret.length == guess.length
secret 和 guess 仅由数字组成
先上code
char * getHint(char * secret, char * guess){
long secret_length = strlen(secret);
long guess_length = strlen(guess);
int A = 0;
int B = 0;
int flat1[2000]={0};
int flat2[2000]={0};
char* secret2 = secret;
char* guess2 = guess;
for(long i=1;i<=secret_length;i++){
if(*secret2 == *guess2){
A++;
flat1[i] = flat2[i] = 1;
}
secret2++;
guess2++;
}
secret2 = secret;
guess2 = guess;
for(long i=1;i<=guess_length;i++){
secret2 = secret;
if(flat2[i]==0){
for(long j=1;j<=secret_length;j++){
if(flat1[j]==0&&(*guess2)==(*secret2)){
B++;
flat1[j]=1;
break;
}
secret2++;
}
}
guess2++;
}
char *retArr = (char *)malloc(10*sizeof(char));
sprintf(retArr,"%dA%dB",A,B);
return retArr;
}
自己的code level比较拉
我还会进一步优化的
遇到的问题
p1:
这个就是纯纯的数组越界了,建议稍微大一点的界
P2
这个就是对于secret指针和guess指针没有进行每轮次的初始化,这个问题经常出现,否则就发生越界问题;
P3
关于返回值问题
char *retArr = (char *)malloc(10*sizeof(char));
sprintf(retArr,"%dA%dB",A,B);
return retArr;
关于sprintf()语句
链接: 菜鸟教程