day_5

Day5

题目:取一个整数a从右端开始的4~7位。

public static void main(String[] args) {
		int a = 12345678;
		int begin = 4; //开始位置
		int end = 7; //结束位置
		a = a / (int)Math.pow(10, begin-1);
		for(int i = 1; i <= end - begin + 1; i++) {
			System.out.print(a%10);//取余输出
			a = a / 10;//取出后删除余数
		}
	}

运行结果:

image-20230715115743913

题目:对10个数进行排序
分析:可以利用选择法,即从后9个比较过程中,选择一个最小的与第一个元素交换,
下次类推,即用第二个元素与后8个进行比较,并进行交换。

public static void main(String[] args) {
		//生成10个随机数,并存入数组
		int[] a = new int[10];
		for(int i = 0; i < 10; i++) {
			a[i] = (int)(Math.random()*100+1);//Math.random()生成[0,1)之间的随机小数
		}
		System.out.println("原数组:\n"+Arrays.toString(a));
		//冒泡排序
		//升序
		for(int i=0; i <a.length-1; i++) {//由于前面已经排好,所以最后一个不用排
			for(int j = 0; j < a.length-1 - i; j++) {
				//优化:j < a.length-1 - i ==> 由于后面的i个数已经排好序,所以不用再排
				if(a[j] > a[j+1]) {
					int temp = a[j];
					a[j] = a[j+1];
					a[j+1] = temp;
				}
			}
		}
		System.out.println("升序排序后的数组:\n"+Arrays.toString(a));
		
		//降序
		for(int i = 0; i < a.length-1; i++) {
			for(int j = 0; j < a.length - 1 -i; j++) {
				if(a[j] < a[j+1]) {
					int temp = a[j];
					a[j] = a[j+1];
					a[j+1] = temp;
				}
			}
		}
		System.out.println("降序排序后的数组:\n"+Arrays.toString(a));
	}		

运行结果:

image-20230715120030512

题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。

public static void main(String[] args) {
		//先把每一位数分离出来
		int a = 1237321;
		int[] data = new int[0];//存放分离的数
		while(true) {//不能确定循环次数的时候使用while循环
			int num = a % 10;//得到个位
			data = Arrays.copyOf(data, data.length+1);//数组扩容
			data[data.length-1] = num;//每得到一个数都放到数组后边
			a = a / 10;//把最后一个数去掉
			if(a == 0) {//a=0说明数据没用了,应该结束循环
				break;
			}
		}
		//将得到的数组输出一下
		System.out.println(Arrays.toString(data));
		boolean flag = true; //设置一个标志位
		for(int i = 0; i < data.length/2; i++) {//length/2:只需要判断一半
			//循环里做判断第一位和对称位操作
			if(data[i] != data[data.length-1-i]) {
				//如果不等,那么更新标志位
				flag = false;
				break;//不再往后判断
			}
		}
		//循环结束后,需根据标志位判断该数是否是回文
		if(flag) {
			System.out.println("是回文!");
		}else {
			System.out.println("不是回文!");
		}
	}

运行结果:

image-20230715120326987

题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。

public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		System.out.print("请输入一个不多与5的正整数:");
		int num = scanner.nextInt();
		f1(num);//方法1
//		f2(num);//方法2
	}

	private static void f1(int num) {
		int count = 0;
		if(num >0 && num <10000) {
			//先不能确定几位数,所以使用while循环
			while(true) {
				int a = num % 10;//去最后一位
				System.out.print(a+"\t");
				num = num / 10;//删除最后一位并更新数据
				count = count + 1;
				if(num == 0) {
					break;
				}
			}
			System.out.println("\n是"+count+"位数");	
		}else {
			System.out.println("输入错误!");
		}
	}
	
	private static void f2(int num) {
		if(num >0 && num <10000) {
			String str = "" + num;
			System.out.println("是"+str.length()+"位数");
			//已知位数,现在使用for循环
			for(int i = 1; i <= str.length(); i++) {
				int  a = num % 10;
				System.out.print(a+" ");
				num = num / 10;
				if(num == 0) {
					break;
				}
			}
		}else {
			System.out.println("输入错误!");
		}
	}

运行结果:

image-20230715123448394

题目:打印出如下图案(菱形)

image-20230715123729738

分析:先把图形分成两部分来看待,前四行一个规律,后三行一个规律,利用双重 for循环,第一层控制行,第二层控制列。

public static void main(String[] args) {
    //上三角形,下三角形
    int line = 7;
    int n = 0; //三角形的行数
    if (line % 2 == 0){//偶数就直接除
        n = line / 2;
    }else{//奇数要加1变偶数再除
        n = (line + 1)/2;
    }
    for (int i = 1; i <= n; i++){
        //打印空格
        for(int j = 1; j <= (n-i); j++){
            System.out.print(" ");
        }
        //打印 *
        for(int j = 1; j<= 2*i - 1; j++){
            System.out.print("*");
        }
        System.out.println();
    }

    //下三角形
    for(int i = 1; i <= (line-n); i++){
        //打印空格
        for (int j = 1; j <= i; j++){
            System.out.print(" ");
        }
        //打印 *
        for(int j = 1; j <= (n-i)*2-1; j++){
            System.out.print("*");
        }
        System.out.println();
    }
}

运行结果:

image-20230715123842547

【程序33】
题目:打印出杨辉三角形(要求打印出10行如下图)
分析:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1

public static void main(String[] args) {
        //打印10行
        int[] pre = {};
        for (int line = 1; line <= 10; line++) {
            int[] nowLine = sjLine(pre, line);//计算当前行的数据值
            pre = nowLine;
            //打印空格
            for(int j = 1; j <= 10 -pre.length; j++){
                System.out.print(" ");
            }
            //打印数据
            for(int k = 0; k < nowLine.length; k++){
                System.out.print(nowLine[k] + " ");
            }
            System.out.println();
        }
}
    //杨辉三角的每一行数据,保存为一个数组
    public static int[] sjLine(int[] pre, int line){
        if (line == 1) {
            int[] arr = new int[]{1}; //局部变量
            return arr;
        }else if(line == 2) {
            int[] arr = new int[]{1,1};
            return arr;
        }else{
            int[] arr = new int[line]; //数组长度等于当前的行号
            arr[0] = 1;   //第一个数始终是 1
            arr[line-1] = 1;//最后一个数始终是 1
            for(int i = 0; i < pre.length - 1; i++){
                arr[i+1] = pre[i] + pre[i+1];   //前数组对应元素相加存到后数组对应为止
            }
            return arr;
        }
    }

运行结果:

image-20230715124158643

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

A码

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

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

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

打赏作者

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

抵扣说明:

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

余额充值