称几次一定能找出那枚假币
时间: 2024-04-22 15:22:12 浏览: 80
可以用三次称量找出那枚假币。
第一次称量:将121枚硬币分成两堆,每堆各放60个硬币,另留一枚硬币不放。将两堆硬币放在天平两端进行称量。
(1)如果两边重量相等,那么假币就是留在一旁的那枚硬币,而且可以通过第二次称量判断假币是轻还是重。
(2)如果两边重量不等,那么假币就在较轻的那一堆中。
第二次称量:将较轻的那堆硬币分成两堆,每堆各放30个硬币,另留一枚硬币不放。将两堆硬币放在天平两端进行称量。
(1)如果两边重量相等,那么假币就是留在一旁的那枚硬币,而且可以判断假币是轻的。
(2)如果两边重量不等,那么假币就在较轻的那一堆中,并且可以判断假币是重的。
第三次称量:将较轻的那堆硬币中的29枚硬币平分成两堆,每堆各放14枚硬币,另留一枚硬币不放。将两堆硬币放在天平两端进行称量。
(1)如果两边重量相等,那么假币就是留在一旁的那枚硬币,而且可以判断假币是轻的。
(2)如果两边重量不等,那么假币就在那堆硬币中,且可以判断假币是重的。
综上所述,至少需要称量三次才能找出那枚假币。在第一次称量中,可以将121枚硬币分成两堆,这样可以确定假币必在一堆中,即可以将问题规模缩小为60枚硬币。在第二次称量中,可以将60枚硬币分成两堆,这样可以确定假币必在一堆中,即可以将问题规模缩小为30枚硬币。在第三次称量中,可以将30枚硬币分成两堆,这样可以找出那枚假币。
相关问题
有121枚硬币,其中120枚质量相同,另一枚是假币.现在不知道假币比真币重还是轻.用天平,至少称几次就一定可以判断假币是轻还是重?为什么,秤几次一定能找出假币
可以用三次称量找出假币,并且可以判断假币是轻还是重。
第一次称量:将121枚硬币分成两堆,每堆各放60个硬币,另留一枚硬币不放。将两堆硬币放在天平两端进行称量。
(1)如果两边重量相等,那么假币就是留在一旁的那枚硬币,而且可以通过第二次称量判断假币是轻还是重。
(2)如果两边重量不等,那么假币就在较轻的那一堆中。
第二次称量:将较轻的那堆硬币分成两堆,每堆各放30个硬币,另留一枚硬币不放。将两堆硬币放在天平两端进行称量。
(1)如果两边重量相等,那么假币就是留在一旁的那枚硬币,而且可以判断假币是轻的。
(2)如果两边重量不等,那么假币就在较轻的那一堆中,并且可以判断假币是重的。
第三次称量:将较轻的那堆硬币中的29枚硬币平分成两堆,每堆各放14枚硬币,另留一枚硬币不放。将两堆硬币放在天平两端进行称量。
(1)如果两边重量相等,那么假币就是留在一旁的那枚硬币,而且可以判断假币是轻的。
(2)如果两边重量不等,那么假币就在那堆硬币中,且可以判断假币是重的。
综上所述,至少需要称量三次才能判断假币是轻还是重。在第一次称量中,可以将121枚硬币分成两堆,这样可以确定假币必在一堆中,即可以将问题规模缩小为60枚硬币。在第二次称量中,可以将60枚硬币分成两堆,这样可以确定假币必在一堆中,即可以将问题规模缩小为30枚硬币。在第三次称量中,可以将30枚硬币分成两堆,这样可以确定假币必在一堆中,即可以找出假币。
在一堆真金币中找出一枚假币C语言
在C语言中,解决这个问题的一种常见方法是利用称重法或者假设检验的思想。这里我们假设可以使用一台能精确测量重量的天平。给定一堆真金币和一台天平,你可以通过以下步骤找到假币:
1. **分组**:
- 将金币分成三组,每组n/3枚(如果金币总数n不是3的倍数,则最后一组可能会少一些)。
2. **第一次比较**:
- 在天平两端各放一组金币。如果平衡,假币在未放置的那一组;如果不平衡,假币在较轻的那一端。
3. **第二次比较**:
- 如果第一次不平衡,取较轻的一组再次分为两半,分别放在天平两端。若平衡,假币在剩下的那一小堆;若仍不平衡,假币就在较轻的一边。
4. **第三次比较**:
- 对于确定含有假币的小群体,继续将它们一分为二,放到天平上,直到只剩下一枚或两枚金币为止。这时,较轻的一枚就是假币。
**伪代码示例**:
```c
int find_fake_coin(int coins[], int n) {
if (n == 1) return coins[0] != gold_weight; // 如果只有一个,直接判断
for (int i = 0; i < n / 3 * 2; i += 3) { // 每次比较3个
if (coins[i] + coins[i+1] + coins[i+2] != gold_weight * 3) {
if (coins[i] + coins[i+1] == gold_weight * 2) return coins[i+2]; // 假币在较轻的那堆
else return coins[i]; // 假币在剩余的两个之中
}
}
// 如果没在前三轮找到,假币肯定在最后那堆
return coins[n-1];
}
```