在DISCUSS里的测试数据都通过了,可是还是WA,这让我很不解,先放在这里吧,下次通过来在来改下。
代码围绕3点展开
1.等号两边的都不可能是假
2.不等号两边的币之外的所有币都是真的
3.在同一种不等号两边都出现过的都是真的
import java.util.Scanner;
public class Main{
public static void main(String[] args)throws Exception{
Scanner cin=new Scanner(System.in);
int ToT=2,ToTnum=0,result=0;
int k=0;
int coinNum=cin.nextInt();
int[] id=new int[coinNum];
String[] idString=new String[coinNum];
for(int i=0;i<id.length;i++){
id[i]=0;
idString[i]="null";
}
int weightings=cin.nextInt();
cin.nextLine();
while(cin.hasNext()){
k=k+1;
String pan=cin.nextLine();
String[] coin=pan.split(" ");
int nOPan=Integer.valueOf(coin[0]);
String c=cin.next();
if(c.equals("=")){
for(int i=0;i<2*nOPan;i++){
id[(int)coin[i+1].charAt(0)-49]=1;
}
}
if(c.equals("<") || c.equals(">")){
ToT=ToT+1;
for(int i=0;i<2*nOPan;i++){
if(id[(int)coin[i+1].charAt(0)-49]!=1){
String temp=c.equals("<")? "heavy" : "light";
String temp2=c.equals("<")? "light" : "heavy";
id[(int)coin[i+1].charAt(0)-49]=ToT;
if(i<nOPan){
if(idString[(int)coin[i+1].charAt(0)-49]==temp2)
id[(int)coin[i+1].charAt(0)-49]=1;
else
idString[(int)coin[i+1].charAt(0)-49]=temp;
}
else{
if(idString[(int)coin[i+1].charAt(0)-49]==temp)
id[(int)coin[i+1].charAt(0)-49]=1;
else
idString[(int)coin[i+1].charAt(0)-49]=temp2;
}
}
}
for(int i=0;i<id.length;i++){
if(id[i]!=ToT)id[i]=1;
}
}
cin.nextLine();
if(k==weightings)break;
}
for(int i=0;i<id.length;i++){
if(id[i]==ToT || id[i]==0){
ToTnum=ToTnum+1;
result=i+1;
}
}
System.out.println(ToTnum==1 ? result : 0);
}
}
本文介绍了一种用于判断硬币真伪的算法实现。该算法基于三种规则:等号两边硬币均为真;不等号两边除比值外其余为真;相同不等号两边出现过的硬币为真。通过输入硬币数量和称重次数,算法能够识别出所有真硬币。
1114

被折叠的 条评论
为什么被折叠?



