找假币
### 题目描述
**本题为代码补全填空题,请将题目中给出的源代码补全,并复制到右侧代码框中,选择对应的编译语言(C/Java)后进行提交。若题目中给出的源代码语言不唯一,则只需选择其一进行补全提交即可。复制后需将源代码中填空部分的下划线删掉,填上你的答案。提交后若未能通过,除考虑填空部分出错外,还需注意是否因在复制后有改动非填空部分产生错误。**
在 8 枚硬币中,有 1 枚假币,假币外观与真币一模一样,只是重量略轻或略重一点。
给你一架天平,要求最多称 3 次,就找出假币,并且知道它是重一些还是轻一些。
下面的代码给出一个解决方案,仔细分析逻辑,填写划线位置缺少的代码。
### 源代码
**C**
```c
#include
int balance(int a, int b)
{
if(ab) 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; ib) return 1;
return 0;
}
static void judge(char[] data, int a, int b, int std){
switch(balance(data[a],data[std])){
case -1:
System.out.println(a + " light");
break;
case 0:
System.out.println(b + " heavy");
break;
case 1:
System.out.println("err!");
}
}
// data 中8个元素,有一个假币,或轻或重
static 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;
}
}
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
scan.nextLine();
for(int i=0; i