您的位置:首页 > 其它

Bulls and Cows

2016-05-11 18:05 155 查看
先说一下,这道题的意思,让你找到同一位的并且相同的数,总和为A,不同位相同的数总和为B,最后输出A,B的值。

这道题默认的是secret和guess位数一样的。

参考了大神的代码,学习了以下,写下思路:

进行循环

首先判断本次循环对应的位是否相同,如果相同,bull++;如果不同判断secret这位数在guess中是否出现,有的话cow++,在判断guess数是否在secret出现,有的话进行bull++;

判断的条件是namemap在secret出现则++;在guess出现则--;

如果namemap小于0,则说明这secret位数在guess出过了;如果大于0,则说明guess这位数在secret出现过了。

代码如下:

class Solution{
public:
string getHint(string secret,string guess){
int n1=secret.size();

int namemap[10]={0};
int bull=0,cow=0;
for(int i=0;i<n1;i++){
if(secret[i]==guess[i]) bull++;
else{
cow=(namemap[secret[i]-'0']<0)?cow+1:cow;
namemap[secret[i]-'0']++;
cow=(namemap[guess[i]-'0']>0)?cow+1:cow;
namemap[guess[i]-'0']--;
}

}

return to_string(bull)+"A"+to_string(cow)+"B";
}

};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: