编程题
找假币 ### 题目描述 **本题为代码补全填空题,请将题目中给出的源代码补全,并复制到右侧代码框中,选择对应的编译语言(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