public class P {
public static void main(String[] args) {
final String Names="ABCDE";
final String[] PaperColor={"黑纸","白纸"};
int[] people=new int[5];
int i;
//0表示赋予某个人说假话的身份,1表示赋予某个人说真话的身份
for(people[0]=0;people[0]<=1;people[0]++)
for(people[1]=0;people[1]<=1;people[1]++)
for(people[2]=0;people[2]<=1;people[2]++)
for(people[3]=0;people[3]<=1;people[3]++)
for(people[4]=0;people[4]<=1;people[4]++) {
for(i=0;i<=3;i++) {
if(!P.isMatch(i,people))
break;
}
if(i>3) {
for(i=0;i<5;i++) {
System.out.println(""+Names.charAt(i)+"-"+PaperColor[people[i]]);
}
}
}
}
//判断某人说的话与他的身份(说假话的人或说真话的人)是否匹配,匹配返回真,不匹配返回假
//people数组是假定的5个人的身份,0表示说假话的人,1表示说真话的人
static boolean isMatch(final int n,int[] people) {
boolean r=false;
int i;
P.count[0]=P.count[1]=0;
//count[0]统计说假话的人数,count[1]统计说真话的人数
for(i=0;i<5;i++) {
if(n!=i) {
if(0==people[i])
P.count[0]++;
else
P.count[1]++;
}
}
r=(0==people[n] && !(P.Record[n][0]==count[0] && P.Record[n][1]==count[1]));
r=(r || (1==people[n] && P.Record[n][0]==count[0] && P.Record[n][1]==count[1]));
return r;
}
static int[] count=new int[2];
//记录每个人说的话的结论
static final int[][] Record={{1,3},{4,0},{3,1},{0,4}};
}