有一个秘密数字A 和一个猜的数字B 请计算出有多少数位是数字和位置都猜对了的,有多少数位是只猜对了数字但是没猜对位置的,每个数位最多只能被统计一次 且需要优先被算为前一种 使用c++进行输出
时间: 2023-11-27 07:49:33 浏览: 53
位运算题目之只出现一次的数字(c++)
假设秘密数字A是一个长度为N的数字串,猜的数字B也是一个长度为N的数字串。
我们可以逐位比较A和B,统计出有多少位数字和位置都猜对了,有多少位数字猜对了但位置不对。具体的算法如下:
```c++
#include <iostream>
#include <cstring>
using namespace std;
int main() {
string A, B;
cin >> A >> B;
int cnt1 = 0, cnt2 = 0;
bool vis[10] = { false }; // 标记数字是否已经被统计过
for (int i = 0; i < A.length(); i++) {
if (A[i] == B[i]) { // 位置和数字都猜对了
cnt1++;
} else { // 只猜对了数字
int num = B[i] - '0';
if (!vis[num] && A.find(B[i]) != string::npos) {
cnt2++;
vis[num] = true;
}
}
}
cout << cnt1 << " " << cnt2 << endl;
return 0;
}
```
假设A的长度为N,时间复杂度为$O(N^2)$,空间复杂度为$O(1)$。
注意,题目要求每个数位最多只能被统计一次,因此在统计只猜对了数字的情况时,需要使用一个布尔数组vis来记录数字是否已经被统计过。
阅读全文