编程题

找假币

题目描述

在8枚硬币中,有1枚假币,假币外观与真币一模一样,只是重量略轻或略重一点。

给你一架天平,要求最多称3次,就找出假币,并且知道它是重一些还是轻一些。

下面的代码给出一个解决方案,仔细分析逻辑,填写划线位置缺少的代码。

#include <stdio.h>


int balance(int a, int b)

{

if(a<b) return -1;

if(a>b) return 1;

return 0;

}


void judge(char* data, int a, int b, int std)

{

switch(balance(data[a],data[std])){

case -1:

printf("%d light\n", a);

break;

case 0:

printf("%d heavy\n", b);

break;

case 1:

printf("err!\n", b);

}

}


// data 中8个元素,有一个假币,或轻或重

void f(char* data)

{

switch( ____________________________________ ){  // 填空

case -1:

switch(balance(data[0]+data[4],data[3]+data[1])){

case -1:

judge(data,0,3,1);

break;

case 0:

judge(data,2,5,0);

break;

case 1:

judge(data,1,4,0);

}

break;

case 0:

judge(data,6,7,0);

break;

case 1:

switch(balance(data[0]+data[4],data[3]+data[1])){

case -1:

judge(data,4,1,0);

break;

case 0:

judge(data,5,2,0);

break;

case 1:

judge(data,3,0,1);

}

break;

}

}


int main()

{

int n;

char buf[100];

scanf("%d", &n);

gets(buf);

int i;

for(i=0; i<n; i++){

gets(buf);

f(buf);

}

return 0;

}


请注意:只需要填写划线部分缺少的内容,不要抄写已有的代码或符号。

查看答案
赣ICP备20007335号-2