【Java】『蓝桥杯』10道编程题及答案(四)

系列文章

【Java】『蓝桥杯』10道编程题及答案(一)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/130223115

【Java】『蓝桥杯』10道编程题及答案(二)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/130304773

【Java】『蓝桥杯』10道编程题及答案(三)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/130305068

【Java】『蓝桥杯』10道编程题及答案(四)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/130392388



前言

我能抽象出整个世界,但是我不能抽象你。 想让你成为私有常量,这样外部函数就无法访问你。 又想让你成为全局常量,这样在我的整个生命周期都可以调用你。 可惜世上没有这样的常量,我也无法定义你,因为你在我心中是那么的具体。

哈喽大家好,本专栏为【Java】专栏,『蓝桥杯』部分,面向于初学者或者对算法感兴趣的朋友们。主要分享基础编程题,一些有趣、新颖的算法,我们要习惯于掌握解题的思路,如果对实操感兴趣,可以关注我的【C#项目】专栏。

本专栏会持续更新,不断完善。大家有任何问题,可以私信我。如果您对本专栏感兴趣,欢迎关注吧,大家一起学习,一起进步。

【Java】『蓝桥杯』10道编程题及答案(四)
在这里插入图片描述


一、题目

1.1 【程序1】

【程序31】
题目:将一个数组逆序输出。
1.程序分析:用第一个与最后一个交换。

1.2 【程序2】

【程序32】
题目:取一个整数a从右端开始的4~7位。
程序分析:可以这样考虑:
(1)先使a右移4位。
(2)设置一个低4位全为1,其余全为0的数。可用(0<<4)
(3)将上面二者进行&运算。

1.3 【程序3】

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

1.4 【程序4】

【程序34】
题目:输入3个数a,b,c,按大小顺序输出。
1.程序分析:利用指针方法。

1.5 【程序5】

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

1.6 【程序6】

【程序36】
题目:有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数

1.7 【程序7】

【程序37】
题目:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。

1.8 【程序8】

【程序38】
题目:写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度。

1.9 【程序9】

【程序39】
题目:编写一个函数,输入n为偶数时,调用函数求1/2+1/4+…+1/n,当输入n为奇数时,调用函数1/1+1/3+…+1/n(利用指针函数)

1.10 【程序10】

【程序40】
题目:字符串排序。


二、答案

2.1 【程序1】

public class ReversePrintArray {
    
    

	/**
	 * 【程序31】 题目:将一个数组逆序输出。 1.程序分析:用第一个与最后一个交换。
	 */
	public static void main(String[] args) {
    
    
		// TODO Auto-generated method stub
		int[] a = {
    
     123, 45, 34, 64, 16, 49, 70, 57, 19 };

		output(1, "该数组正序输出为:", a);
		output(-1, "该数组反序输出为:", a);
	}

	private static void output(int f, String str, int[] a) {
    
    
		int k;
		System.out.print(str);
		for (int i = 0; i < a.length; i++) {
    
    
			if (f >= 0) {
    
    
				k = i;
			} else {
    
    
				k = a.length - i - 1;
			}
			System.out.print(a[k] + "  ");
		}
		System.out.println();
	}
}


2.2 【程序2】

public class MoveSpecifiedNumbers {
    
    

	/**
	 * 【程序32】 题目:取一个整数a从右端开始的4~7位。 程序分析:可以这样考虑: (1)先使a右移4位。
	 * (2)设置一个低4位全为1,其余全为0的数。可用~(~0<<4) (3)将上面二者进行&运算。
	 */
	public static void main(String[] args) {
    
    
		// TODO Auto-generated method stub
		char a = '\u0f40';// 0000 1111 0100 0000b
		int b = 15;// b为0000 0000 0000 1111b
		a >>= 4;// a右移四位得:0000 0000 1111 0100b
		int c;
		c = a & b; // a&b后,c为:0000 0000 0000 0100b,亦即4。
		System.out.println(c);

	}
}

2.3 【程序3】

import java.util.Scanner;

public class YangHuiTriangle {
    
    

	/**
	 * 【程序33】 题目:打印出杨辉三角形(要求打印出10行如下图) 1.程序分析:
	 */
	// 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) {
    
    
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		int n;
		while (true) {
    
    
			System.out.println("请输入杨辉三角的阶数(>=0)的整数");
			n = sc.nextInt();
			if (n > 0)
				break;
		}
		int[][] a = new int[n][];

		for (int i = 0; i < n; i++) {
    
    
			a[i] = new int[i + 1];
			String str = "";
			for (int j = 0; j <= i; j++) {
    
    
				if (i == 0 && j == 0) {
    
    
					a[i][j] = 1;
				} else if (j == 0 || j == i) {
    
    
					a[i][j] = 1;
				} else {
    
    
					a[i][j] = a[i - 1][j - 1] + a[i - 1][j];
				}
				str += (a[i][j] + "       ").substring(0, 6);
			}
			System.out.println(space(20 - i) + str);
		}
	}

	private static String space(int n) {
    
    
		String s = "";
		for (int i = 0; i <  n; i++) {
    
    
			s += "   ";
		}
		return s;
	}
}

2.4 【程序4】

import java.util.Scanner;

public class ThreeNumbersCompare {
    
    

	/**
	 * 【程序34】 题目:输入3个数a,b,c,按大小顺序输出。
	 */
	public static void main(String[] args) {
    
    
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入三个数(中间用空格隔开或者回车,多余的无效):");
		int a, b, c;
		a = sc.nextInt();
		b = sc.nextInt();
		c = sc.nextInt();
		System.out.println("原序:" + a + ", " + b + ", " + c);

		int tmp;
		if (a < b) {
    
    
			tmp = a;
			a = b;
			b = tmp;
		}
		if (a < c) {
    
    
			tmp = a;
			a = c;
			c = tmp;
		}
		if (b < c) {
    
    
			tmp = b;
			b = c;
			c = tmp;
		}

		System.out.println("现在:" + a + " >= " + b + " >= " + c);
	}
}


2.5 【程序5】

import java.util.Scanner;

public class PrizeCommision {
    
    

	/**
	 * 【程序12】
	 * 题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10
	 * %提成,
	 * 高于10万元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3
	 * %;60
	 * 万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?
	 * 1.程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。
	 */
	public static void main(String[] args) {
    
    
		// TODO Auto-generated method stub
		long profit;
		long prize;
		Scanner sc=new Scanner(System.in);
		
		while(true){
    
    
			System.out.println("请输入利润:");
			profit=sc.nextLong();
			if(profit>0)break;
		}
		
		if(profit<=100000){
    
    
			prize=(long) (profit*.1);
		}else if(profit<=200000){
    
    
			prize=(long) (100000*.1+(profit-100000)*.075);
		}else if(profit<=400000){
    
    
			prize=(long) (100000*.1+100000*.075+(profit-200000)*.05);
		}else if(profit<=600000){
    
    
			prize=(long) (100000*.1+100000*.075+200000*.05+(profit-400000)*.03);
		}else if(profit<=1000000){
    
    
			prize=(long) (100000*.1+100000*.075+200000*.05+200000*.03+(profit-600000)*.015);
		}else {
    
    
			prize=(long) (100000*.1+100000*.075+200000*.05+200000*.03+400000*.015+(profit-1000000)*.01);
		}
		
		System.out.println("你应该得到的奖金为:"+prize);
	}
}



2.6 【程序6】

import java.util.Scanner;

public class ShiftMNumbers {
    
    

	/**
	 * 【程序36】 题目:有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数
	 */
	public static void main(String[] args) {
    
    
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		int n, m;
		while (true) {
    
    
			System.out.println("请输入一个大于1的整数:");
			n = sc.nextInt();
			if (n > 1)
				break;
		}
		int[] a = new int[n];
		int[] b = new int[n];
		while (true) {
    
    
			System.out.println("请输入一个大于0而且小于" + n + "的整数:");
			m = sc.nextInt();
			if (m > 0 && m < n)
				break;
		}

		for (int i = 0; i < n; i++) {
    
    
			System.out.println("请输入" + n + "个数(用空格或回车分隔,多余无效):");
			a[i] = sc.nextInt();
		}

		for (int i = 0; i < n; i++) {
    
    
			if (i < m) {
    
    
				b[i] = a[i + m];
			} else {
    
    
				b[i] = a[i - m];
			}
		}

		output("移位前:", a);

		output(n + "个整数,使其前面各数顺序向后移" + m + "个位置,最后" + m + "个数变成最前面的" + m
				+ "个数,最后得到:", b);
	}

	private static void output(String s, int[] a) {
    
    
		System.out.println(s);
		for (int i = 0; i < a.length; i++) {
    
    
			System.out.print(a[i] + "  ");
		}
		System.out.println();
	}
}


2.7 【程序7】

①方法一:

import java.util.Scanner;

public class CircleNumber {
    
    

	/**
	 * 【程序37】 题目:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
	 */
	public static void main(String[] args) {
    
    
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		int n;
		while (true) {
    
    
			System.out.println("请输入一个大于1的整数:");
			n = sc.nextInt();
			if (n > 1)
				break;
		}

		int[] a = new int[n];
		for (int i = 0; i < n; i++) {
    
    
			a[i] = i + 1;
		}

		int e = 0, c = 0;
		int[] b = new int[n - 1];
		int bi = 0;
		System.out.print("\n==========================\n当为" + n
				+ "个人时,去掉的人的序号有:");
		whileCircle: while (true) {
    
    
			for (int i = 0; i < n; i++) {
    
    
				boolean f = true;
				for (int j = 0; j < bi; j++) {
    
    
					if (a[i] == b[j]) {
    
    
						f = false;
						break;
					}
				}
				if (f) {
    
    
					c++;
					if (c == 3) {
    
    
						b[bi] = a[i];
						System.out.print(b[bi] + " ");
						c = 0;
						bi++;
						if (bi == (n - 1)) {
    
    
							break whileCircle;
						}
					}
				}
			}
		}

		for (int i = 0; i < n; i++) {
    
    
			boolean f = false;
			for (int j = 0; j < n - 1; j++) {
    
    
				if (a[i] == b[j]) {
    
    
					f = true;
					break;
				}
			}
			if (!f) {
    
    
				System.out.println("\n最后剩下的人的号码为:" + a[i]
						+ "号。\n==========================");
				break;
			}
		}
	}
}

②方法二:

import java.util.Scanner;

public class CircleNumber2 {
    
    

	/**
	 * 【程序37】 题目:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
	 */
	public static void main(String[] args) {
    
    
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		int n;
		while (true) {
    
    
			System.out.println("请输入一个大于1的整数:");
			n = sc.nextInt();
			if (n > 1)
				break;
		}

		boolean[] b = new boolean[n];
		for (int i = 0; i < b.length; i++) {
    
    
			b[i] = true;// 最初所有人均在圈中,如果为false,表示人已经离开圈子
		}

		int index = 0;
		int left = n;
		int count = 0;
		while (true) {
    
    
			if (left == 1) {
    
    
				break;
			}
			if (b[index]) {
    
    
				count++;
				if (count == 3) {
    
    
					count = 0;
					left--;
					b[index] = false;
				}
			}
			index++;
			if (index == n) {
    
    
				index = 0;
			}
		}

		for (int i = 0; i < b.length; i++) {
    
    
			if (b[i]) {
    
    
				System.out.println("最后剩下的是:" + (i + 1) + "号。");
				break;
			}
		}
	}
}



2.8 【程序8】

public class MainParaLength {
    
    

	/**
	 * 【程序38】 题目:写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度。
	 */
	public static void main(String[] args) {
    
    
		// TODO Auto-generated method stub
		System.out.println(args[0].length());
	}

}


2.9 【程序9】

import java.util.Scanner;

public class OddEvenTest {
    
    

	/**
	 * 【程序39】
	 * 题目:编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数1/1+1/3+...+1/n
	 */
	public static void main(String[] args) {
    
    
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		int n;
		while (true) {
    
    
			System.out.println("请输入一个正整数:");
			n = sc.nextInt();
			if (n > 0)
				break;
		}

		float sum = 0;
		int start;
		if (n % 2 == 0)
			start = 2;
		else
			start = 1;
		String s = "";
		for (int i = start; i <= n; i += 2) {
    
    
			s += " + 1/" + i;
			sum += 1.0 / i;
		}
		System.out.println(s.substring(3) + " = " + sum);
	}
}



2.10 【程序10】

public class StringArraySort {
    
    

	/**
	 * 【程序40】 题目:字符串排序。
	 */
	public static void main(String[] args) {
    
    
		// TODO Auto-generated method stub
		String[] str={
    
    "hello","Hello","world","abc","wor_ld","123","adk5433","14bcd","kdard"," fdkajd"};
		for(int i=0;i<str.length-1;i++){
    
    
			for(int j=i+1;j<str.length;j++){
    
    
				String s;
				if(str[i].compareTo(str[j])>1){
    
    //比较结果大于1,则str[i]位置应该在str[j]后面
					s=str[i];
					str[i]=str[j];
					str[j]=s;
				}
			}
			System.out.print(str[i]+"   ");
		}
		System.out.println(str[str.length-1]);
	}
}


猜你喜欢

转载自blog.csdn.net/youcheng_ge/article/details/130392388