有一个秘密数字A 和一个猜的数字B 请计算出有多少数位是数字和位置都猜对了的,有多少数位是只猜对了数字但是没猜对位置的,每个数位最多只能被统计一次 且需要优先被算为前一种
时间: 2023-11-27 15:49:32 浏览: 51
杭电的acm的猜数字题目
5星 · 资源好评率100%
这个问题可以用类似猜数字游戏的方法来解决。具体步骤如下:
1. 将秘密数字A和猜的数字B转换为字符串,方便逐位比较。
2. 遍历字符串B的每一位,如果该位与字符串A对应位置上的数字相同,则将两个字符串该位置上的字符都标记为已匹配(比如用“X”代替)。
3. 再次遍历字符串B的每一位,如果该位上的数字在字符串A中出现过(但是位置不对),并且该位还没有被标记为已匹配,则将该位置上的字符标记为数字匹配但位置不匹配(比如用“O”代替)。
4. 统计标记为“X”的字符个数和标记为“O”的字符个数即可得到题目要求的答案。
下面是Python代码实现:
```python
def compare(A, B):
A, B = str(A), str(B)
hits, misses = 0, 0
A_masked, B_masked = "", ""
for i in range(len(B)):
if B[i] == A[i]:
hits += 1
A_masked += "X"
B_masked += "X"
else:
A_masked += A[i]
B_masked += B[i]
for i in range(len(B)):
if B_masked[i] in A_masked and B_masked[i] != "X":
misses += 1
A_masked = A_masked.replace(B_masked[i], "", 1)
return hits, misses
```
例如,如果秘密数字A为“1234”,猜的数字B为“0321”,则调用compare函数后会返回(0, 2),表示猜的数字中有2位数字匹配但位置不匹配。
阅读全文