题目
事情是这样的。一个老板收了一堆硬币(经常有人拿着一堆硬币买东西),细心的老板发现这些硬币里有一个假币,他想快速的找出来,于是就把问题交给了学OI的你,只知道那枚假币很轻,可以用天平分辨出来。编写程序,求出最少找出纸币的称量次数。
自己编的,各种版本网上很多,反正就是这么个题,雷同纯属巧合。
分析
二分查找思想。
先分两半。轻的那一半接着分。
如果是奇数(分不出数目相等的两半),那么就单独拿出来一个,天平平衡就是它,不平衡就不是他。
进一步优化,我们发现,其实就像猜数那个游戏一样。
也取决于2的n次方。
大水题,比较好想。(至少我是这么认为的)
(比小凯那个好想多了)
代码
#include <cstdio>
using namespace std;
int main()
{
int n[10005]={};
int ans[10005];
int i=0;
do
{
int x;
scanf("%d",&x);
n[++i]=x;
}while(n[i]!=0);
i--;
for(int k=1;k<=i;k++)
{
int j;
for(j=0;n[k]!=1;j++)
n[k]/=2;
ans[k]=j;
}
for(int k=1;k<=i;k++)
printf("%d\n",ans[k]);
if(n[1]==0)
printf("0");
return 0;
}
写这道题的时候码风还是乱的