day_4

Day4

题目:输入某年某月某日,判断这一天是这一年的第几天?
1.程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于3时需考虑多加一天。
//闰年规则: 能被400整除,或者能被4整除但是不能被100整除。

public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入年份(四年年份):");
        int year = scanner.nextInt();
        System.out.println("请输入月(1~12):");
        int month = scanner.nextInt();
        System.out.println("请输入日期(1~31):");
        int date = scanner.nextInt();
        int[] md = {31,28,31,30,31,30,31,31,30,31,30,31};//每个月的天数
        int sumday = 0;
        //month = 4    找前四个月的天数数据进行累加
        for (int i = 0; i < month - 1; i++) { // 1。i控制循环的次数  2.i作为数组的下标使用
            sumday = sumday + md[i];
        }
        sumday = sumday + date;   //加上输入月对应的天数
        //如果是闰年,并且输入的月份大于2,那么再加上1  因为闰年的2月有29天。
        if (isRunYear(year) && month > 2){
            sumday = sumday + 1;
        }
        boolean flag = isRunYear(year);
        if (flag) {
            System.out.println(year+"是闰年");
        }else {
            System.out.println(year+"不是闰年");
        }
        System.out.println(year+"年"+month+"月"+date+"日,是本年的第"+sumday+"天。");

    }

    //定义函数,判断是否为闰年
    public static boolean isRunYear(int year){
        if(year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)){
            return true;
        }else{
            return false;
        }
    }

运行结果:

image-20230715114003283

题目:将一个数组逆序输出。
分析:用第一个与最后一个交换。
只输出,可以选择最后一个往第一个输出把数组中的数据逆序:用第一个与最后一个交换,第二个和倒数第二个交换

public static void main(String[] args) {
		int[] arr = new int[10];
		for(int i = 0; i < 10; i++) {
			arr[i] = (int)(Math.random()*100)+1;
		}
		System.out.println("----------正序输出----------");
		System.out.println(Arrays.toString(arr));
		System.out.println("----------逆序输出----------");
		for(int i = arr.length-1; i > 0; i--) {
			System.out.print(arr[i]+" ");
		}
		System.out.println();
		//修改数组逆序
		for(int j = 0; j < arr.length-1; j++) {
			//交换位置
			int temp = arr[j];
			arr[j] = arr[arr.length-1-j];
			arr[arr.length-1-j] = temp;
		}
		System.out.println(Arrays.toString(arr));
		
		//再修改数组逆序
		for(int i = 0; i < arr.length/2; i++) {//arr.length/2 ,使得循环次数变少
			int temp = arr[i];
			arr[i] = arr[arr.length-1-i];
			arr[arr.length-1-i] = temp;
		}
		System.out.println(Arrays.toString(arr));
	}

运行结果:

image-20230715114324477

题目:输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。

public static void main(String[] args) {
		//自定义一个数组
		int[] arr = {1, 19, 80, 76, 38, 70, 55, 69, 22};
		int max_index = 0;
		int min_index = 0;
		System.out.println("原数组:\n"+Arrays.toString(arr));
		for(int i = 1; i < arr.length; i++) {//从第2个数开始比较
			if(arr[i] > arr[max_index]) {//如果后面个比前面一个数大,那么就记录后面个数的索引位置
				max_index = i;//记录这一次比较中的较大数索引位置
			}
		}//循环结束后,会找到数组中最大数据的下标位置
		//接下来我们通过临时变量来交换数据
		int temp = arr[0];//取出第 1 个数据
		arr[0] = arr[max_index];//将最大数与第一个元素交换
		arr[max_index] = temp;//交换完成
		
		//最小数据同理可得
		for(int i = 1; i < arr.length; i++) {
			if(arr[i] < arr[min_index]) {
				min_index = i;
			}
		}
		temp = arr[arr.length-1];
		arr[arr.length-1] = arr[min_index];
		arr[min_index] = temp;
		
		//输出交换后的数组
		System.out.println("输出交换后的数组:\n"+Arrays.toString(arr));		
	}

运行结果:

image-20230715114556560

题目:有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数
分析:意思每个元素都往后移动 m 次

public static void main(String[] args) {
		int[] a = {1, 19, 80, 76, 38, 70, 55, 69, 22};	//自定义
		int m = 3;
		System.out.println("原数组:\n"+Arrays.toString(a));
		for(int i = 1; i <= m; i++) {//外层循环控制移动次数
			int last = a[a.length-1];//保存最后一个数据
			for(int j = a.length-2; j >= 0 ; j--) {//内层循环控制数组中每个元素向后移动一位
				a[j+1] = a[j]; 
			}
			a[0] = last;//放回第一位
		}
		System.out.println("移动后数组:\n"+Arrays.toString(a));
	}

运行结果:

image-20230715114807967

题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。分析:首先判断此数是否大于最后一个数,然后再考虑插入中间的数的情况,插入后此元素之后的数,依次后移一个位置。

public static void main(String[] args) {
		int[] a = {1,3,5,7,9,11};
		int x = 6;//需要插入的数
		int[] b = new int[a.length+1];//创建一个比原数组多 1 的新数组
		int index = 0; //下标记录
		System.out.println("原数组:"+Arrays.toString(a));
		for(int i = 0; i < a.length; i++) {
			if(x > a[i]) {//如果需插入的数比i位置的大,说明i位置不合适,i原地不动
				b[i] = a[i];
			}else {//否则比 i 小,说明这一个位置是合适的,记录该位置
				index = i;
				b[i] = x;//满足插入条件,插入
				break;//结束循环
			}
		}
		//现在还剩a.length-index个元素需处理
		for(int i=index; i <a.length; i++) {
			b[i+1] = a[i];//旧放新
		}
		System.out.println("插入后的数组:"+Arrays.toString(b));
	}

运行结果:

image-20230715115028475

另一种实现:

public static void main(String[] args) {
		int[] a = {1,3,5,7,9,11};
		int x = 6;//需要插入的数
		a = Arrays.copyOf(a, a.length+1);//是原数组长度加 1
		int index = 0; //下标记录
		System.out.println("原数组:"+Arrays.toString(a));
		for(int i = 0; i < a.length; i++) {
			//先通过条件判断找到可以插入的合适下标位置
			if(x < a[i]) {
				index = i;
				break;
			}
		}
		for(int i = a.length-1; i > index; i--) {
			//倒数第二个往倒数第一个挪
			a[i] = a[i-1];
		}
		//挪完之后索引位置会空出,此时将待插入数据放入即可
		a[index] = x;
		//输出数组
		System.out.println("插入后的数组:"+Arrays.toString(a));
	}

运行结果:

image-20230715115324013

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

A码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值