A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始


从网上找到一份编程练习题,我决定将里面的题目全都做一遍。

/*
        题目 :两个乒乓球队进行比赛 ,各出三人 。
        甲队为 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 比
*/

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马