假币问题
【问题描述】
一个袋子里有30个银币,其中一枚是假币,并且假币和真币一模一样,肉眼难以分辨,目前已知假币比真币重量轻一点。请问,如何分辨出假币?
【问题分析】
首先为每个银币编号,然后将所有的银币等分为两份,放在天平的两边。这样就将区分30个银币的问题变为区别两堆银币的问题。
因为假币分量较轻,因此天平较轻的一侧中一定包含假币。
再将较轻的一侧中银币等分为两份,重复上述做法。
直到剩下两枚银币,便可用天平直接找出假银币。
【问题代码】
#include <stdio.h>
//本题是C语言菜鸟编写,部分代码赘余,请见谅!!
//注意当我们用递归时,一定要返回你说递归的值!!
int getplace(int a[], int Cen, int Hlen);
int weight(int x[], int Cen, int Hlen);
int main()
{
int a[30] = {
1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1