12个硬币称三次c语言,十二硬币的C语言判别
时间: 2023-08-08 15:06:33 浏览: 118
这个问题其实是一个经典的谜题,可以采用以下的方法进行解决:
1. 将12个硬币分成三组,每组4个硬币。
2. 对任意两组硬币进行称重,如果两组硬币重量相等,那么第三组中必有假币,否则假币在两组中重量轻的那组。
3. 将重量轻的一组硬币分成两组,每组2个硬币。
4. 对这两组硬币进行称重,如果两组硬币重量相等,那么第三组中必有假币,否则假币在重量轻的那组。
5. 将重量轻的一组硬币中的两个硬币任选一个进行称重,如果两个硬币重量相等,那么另一个硬币就是假币,否则被称重的硬币就是假币。
至此,我们就可以确定出假币所在的位置。
对于C语言程序实现,可以采用以下代码:
```c
#include <stdio.h>
int main()
{
int coins[12] = {1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1}; // 前11个硬币为真币,第7个硬币为假币
int i, j, k;
// 第一次称重
if (coins[0] + coins[1] + coins[2] + coins[3] == coins[4] + coins[5] + coins[6] + coins[7])
{
// 假币在第8-12个硬币中
if (coins[8] + coins[9] + coins[10] == coins[11])
{
printf("第7个硬币是假币\n");
}
else if (coins[8] + coins[9] + coins[10] < coins[11])
{
printf("第11个硬币是假币\n");
}
else
{
printf("第10个硬币是假币\n");
}
}
else if (coins[0] + coins[1] + coins[2] + coins[3] < coins[4] + coins[5] + coins[6] + coins[7])
{
// 假币在第1-4个硬币中
if (coins[0] + coins[1] == coins[2] + coins[3])
{
printf("第5个硬币是假币\n");
}
else if (coins[0] + coins[1] < coins[2] + coins[3])
{
printf("第1个硬币是假币\n");
}
else
{
printf("第2个硬币是假币\n");
}
}
else
{
// 假币在第5-7个硬币中
if (coins[4] == coins[5])
{
printf("第6个硬币是假币\n");
}
else if (coins[4] < coins[5])
{
printf("第5个硬币是假币\n");
}
else
{
printf("第7个硬币是假币\n");
}
}
return 0;
}
```
需要注意的是,这里假设假币比真币轻,如果不是这种情况,需要进行修改。同时,这个代码只适用于12个硬币的情况,如果硬币数量不同,需要进行相应的修改。
阅读全文