20200715-数组-冒泡排序、鸡兔同笼

20200715-数组-冒泡排序、鸡兔同笼

一、公鸡2文,母鸡1文,小鸡半文,每种至少一只 100文买100只鸡有多少种可能:

PS:请使用循环获得所有可能并插入数组,使用遍历数组的方式输出

  • 分析:
  • 由于开始不知道一共会产生多少组数字,无法具体确定数组的维数
  • 处理方法是,先设置成一个较大的维数,然后重新定义一个二维数组int[][] rst,
  • 在得到结果,知道具体位数之后,在通过Arrays.copyof语句截取所需位数,截掉不需要的维数
  • 再通过for(int[] n :rst)遍历新的二维数组 其中: int[] n 是截取rst二维数组中的一维
public class zy2 {
    public static void main(String[] args) {
        int[][] a = new int[100000][3];
        int i = 0;
        for (int cock = 0; cock < 50 ; cock++) {
            for (int hen = 0; hen < 100; hen++) {
                int chick = 100 - cock - hen;
                if (2*cock+hen+chick/2==100&&chick%2==0){
                    a[i][0]=cock;
                    a[i][1]=hen;
                    a[i][2]=chick;
                    i++;
//                    System.out.print("公鸡:"+cock+" \t");
//                    System.out.print("母鸡:"+hen+" \t");
//                    System.out.println("小鸡:"+chick);
                }
            }
        }
        int[][] rst;
        rst = Arrays.copyOf(a,i);
        for (int[] r :rst){ //r是选取二维数组中的一维,不能直接输出二维数组
            System.out.println(Arrays.toString(r));
        }
    }
}

其中使得输出为数组形式的代码:

int[][] rst;
        rst = Arrays.copyOf(a,i);
        for (int[] r :rst){ //r是选取二维数组中的一维,不能直接输出二维数组
            System.out.println(Arrays.toString(r));
  

二、冒泡排序

  • 思路:
  • 外层循环定义共进行多少轮交换
  • 内层循环定义每次循环共两两交换多少次
  • 每两个相邻的数两两比较大小,若从小到大排序,则前面的数大时交换,否则不交换
  • 外层循环运行一次,可找出当前最大的数,通过交换移到最后一位
public class zy5 {
    public static void main(String[] args) {
        int[] a = {22,13,15,17,5,8,21,19};
        int tmp = 0;
        for (int i = 0; i <a.length-1 ; i++) {
            for (int j = 0; j <a.length-1-i ; j++) {
                if (a[j+1]<a[j]){
                    tmp=a[j];
                    a[j]=a[j+1];
                    a[j+1]=tmp;
                }
            }
        }
        System.out.println(Arrays.toString(a));
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值