如何找次品

先看一下一个较为容易的问题: 15个零件里,有一个是次品,次品重一些,用天平称,至少几次能找到那个次品

在http://www.360doc.com/content/11/0402/18/600865_106744349.shtml给出了这样一个答案:

3次
1,分成两份,都是7个,另外一个单独,把两份放天平上,如果平衡,单独的那个就是次品,如果不是,挑出重的那堆7个,继续下面步骤
2,继续分两份,都是3个,另一个单独,天平称,平衡的话,单独的就是次品,不平衡的话,挑出重的那堆3个,继续下面步骤
3,分成三分,都是1个,任意取两个放天平,平衡的话,没称的那个是次品,不平衡的话,重的那个是次品。
用这种方法,最慢3步即可找出来,运气好第一次就找出来了。

上面的问题是比较简单的。加大难度:12个乒乓球中有一个次品,满足以下条件:
1. 12个乒乓球大小形状完全一样;
2. 其中除了一个次品外,11个乒乓球重量相同;
3. 不知道次品相比其他乒乓球是重量还是轻;
4. 有一个没有砝码的天平
用天平称3次找出次品。

这个得解决办法有点绕弯,首先将这些乒乓球依次标号为1到12,思路如下:

如果觉得上面的比较绕弯,下面的方法也可以,但是需要4次比较:


转载于:https://my.oschina.net/letiantian/blog/317141

要在 C 语言中出含有次品的十个货物,你可以使用称重法(也称为二分查),这是一种经典的算法,用于在一个包含一个次品的数组中次品。假设所有的货物重量都是整数,并且次品比其他正品轻一些。这里是一个基本的示例: ```c #include <stdio.h> int find_weighted_anomaly(int weights[], int n) { if (n == 1) { // 如果只有一个元素,那就是异常品 return 0; // 假设0代表正常,正数代表轻于正常 } // 将物品分成三组,每组3个 int group1[3], group2[3], group3[4]; for (int i = 0; i < 3; i++) { group1[i] = weights[i]; } for (int i = 3; i < 6; i++) { group2[i - 3] = weights[i]; } for (int i = 6; i < 10; i++) { group3[i - 6] = weights[i]; } // 比较第一组和第二组,如果一样则次品在第三组 if (compare_weights(group1, group2) == 0) { return find_weighted_anomaly(group3, 4); } else if (group1[2] > group2[2]) { // 第一组更重,次品在第二组 return find_weighted_anomaly(group2, 3); } else { // 第一组更轻,次品在第一组 return compare_weights(group1, group1[2]); } } // 比较两个数组的总重量 int compare_weights(int *array1, int *array2) { return (array1[0] + array1[1] + array1[2]) - (array2[0] + array2[1] + array2[2]); } int main() { int weights[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; // 假设第10个是次品 int n = sizeof(weights) / sizeof(weights[0]); int anomaly_index = find_weighted_anomaly(weights, n); printf("The defective item is at index %d.\n", anomaly_index); return 0; } ``` 这个程序首先将10个物品分为三组,然后比较每组的重量。通过不断缩小范围,最后就能确定出那个次品在哪一个位置。注意这里的`weights`数组是按升序排列,如果实际情况不是这样,你需要先排序再进行比较。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值