从网上找到一份编程练习题,我决定将里面的题目全都做一遍。
/*
题目 :两个乒乓球队进行比赛 ,各出三人 。
甲队为 a,b,c 三人 ,乙队为 x,y,z 三人 。已抽签决定比赛名单。
有人向队员打听比赛的名单。a 说他不和 x 比, c 说他不和 x,z 比,请编程序找出三队赛手的名单。
*/
/*
一个简单的逻辑题。口算就出结果 a-z , b-x , c-y 。
但是编程实现的话,不使用人的逻辑排除,我的考虑是使用二维数组实现。整体思路比较繁琐,以后想到简单的办法后再写过。
思路:
1、定义二维数组arr[3][3],行表示甲队,列表示乙队。 行角标0,1,2分别对应a,b,c。列角标0,1,2表示x,y,z。
2、初始化,根据题目条件 将 "a 说他不和 x 比, c 说他不和 x,z 比",对应角标的值赋值为0,其余待确定的赋值为1。
3、扫描二维数组的每一行,记录每一行的和。当某行的和为1时,表示已有一对队员确定了对手,记录该列的角标,将该列其他位置的值赋值为0。
4、当完成全部扫描后和赋值后,就已经找到了各自的对手。遍历二维数组找出所有值为1的角标,即为最后的比赛安排结果。
---------------> 下面代码就是对上述思路的实现。
*/
class BiSai {
public static void main(String[] args) {
int[][] arr=new int[3][3];
//初始化数据
for (int i=0; i<arr.length; i++){
for (int j=0; j<arr.length; j++){
arr[j]=1; //待确定数据
arr[0][0]=0; //a 说他不和 x 比
arr[2][0]=0; //c 说他不和 x 比
arr[2][2]=0; //c 说他不和 z 比
}
}
int sum=0; //每一行的和
int col=0; //记录列角标
int count=0; //控制扫描行的次数
while(count<=3){ //最多扫描三次
for (int i=0; i<arr.length; i++){
sum=0; //扫描每一行时,重新赋值每一行的和为0
for (int j=0; j<arr.length; j++){ //扫描第i行的每一列
sum=sum+arr[j]; //求第i行的和
}
if (sum==1){ //当第i行的和为1的时
for (int j=0; j<arr.length; j++){ //扫描第i的每一列
if (arr[j]==1){ //如果第i行中第j列的值为1
col=j; //记录j的角标,为的是将数组中col列的值全赋值为0
}
}
for (int k=0; k<arr.length; k++){ //扫描第col列的每一行
if (k!=i){ //只要不是当前sum为1的那一行
arr[k][col]=0; //其他行col列的值全部设置为0
}
}
}
}
count++;
}
//输出结果
for (int i=0; i<arr.length; i++){
for (int j=0; j<arr.length; j++){
if (arr[j]==1){
char a=(char)(i+'a');
char b=(char)(j+'x');
System.out.println(a+" 和 "+b+" 比");
}
}
}
}
}
/*
输出结果:
a 和 z 比
b 和 x 比
c 和 y 比
*/
|
|