用c语言写程序模拟区分假币问题,有30枚硬币,其中一枚假币,已知假币比真币稍轻,求完整代码。
#include stdio.h
main()
{
int b[30]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1}; //用0代表假币
int i=0;
int c=b[0]; //把第一个赋给c
for (;i30;i++)
//把第二个以后的币都和第一个比较,如果比它轻就输出它。
if(cb[i])
printf(“第%d个是假的”,i+1);
}
代码如上。不懂可以问我。
c语言简单问题~假币
帮你分析下代码吧
#includestdio.h
int main()
{
int n,i,a,b;
while(scanf(“%d”,n)!=EOFn!=0)
{
i=1; //还没有开始称重i应该赋值为0
while(n3) //大于一枚的时候一定要称 n1
{
a=n/3;
b=n%3+a;
if(ab)
{n=a;}
else
{n=b;} //由于你要考虑的是最少称重的次数
所以直接取总数的三分之一就可以了(只是因为有最少次数的条件,所以才能这样 ,不然还得考虑不能整除时候多出来的硬币)
以上代码直接取n=n/3就可以了
i++;
}
printf(“%d\n”,i);
}
return 0;
}
C语言 猜假币问题
因为每次输入一个字符之后需要敲一个回车键,而scanf()是不接受这个回车符的,因此呢第二次的scanf就直接认为这个回车符就是你第二次的输入了,所以不会有想要的结果,在每次的scanf()之后清空一下输入流,这样fflush(stdin) ;这样多余的回车符就去掉了。