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

这篇具有很好参考价值的文章主要介绍了【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】『蓝桥杯』10道编程题及答案(五)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/130444113



前言

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

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

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

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


一、题目

1.1 【程序1】

【程序21】
题目:求1+2!+3!+…+20!的和
1.程序分析:此程序只是把累加变成了累乘。

1.2 【程序2】

【程序22】
题目:利用递归方法求5!。
1.程序分析:递归公式:fn=fn_1*4!

1.3 【程序3】

【程序23】
题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?
1.程序分析:利用递归的方法,递归分为回推和递推两个阶段。要想知道第五个人岁数,需知道第四人的岁数,依次类推,推到第一人(10岁),再往回推。

1.4 【程序4】

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

1.5 【程序5】

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

1.6 【程序6】

【程序26】
题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续 判断第二个字母。
1.程序分析:用情况语句比较好,如果第一个字母一样,则判断用情况语句或if语句判断第二个字母。

1.7 【程序7】

【程序27】
题目:求100之内的素数

1.8 【程序8】

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

1.9 【程序9】

【程序29】
题目:求一个3*3矩阵对角线元素之和
1.程序分析:利用双重for循环控制输入二维数组,再将a[i][i]累加后输出。

1.10 【程序10】

【程序30】
题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。

  1. 程序分析:首先判断此数是否大于最后一个数,然后再考虑插入中间的数的情况,插入后此元素之后的数,依次后移一个位置。


二、答案

2.1 【程序1】

public class FactorialAddSum {

	/**
	 * 【程序21】 题目:求1+2!+3!+...+20!的和 1.程序分析:此程序只是把累加变成了累乘。
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		long t = 1;
		long sum = 1;
		String s = "1!";
		for (int i = 2; i < 21; i++) {
			t *= i;
			sum += t;
			s += " + " + i + "!";
		}

		System.out.println(s + " = " + sum);
	}

}



2.2 【程序2】

import java.util.Scanner;

public class FactorialRecursive {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		int n;
		while (true) {
			System.out.println("请输入一个非负整数:");
			if (0 <= (n = sc.nextInt()))
				break;
		}

		System.out.println(n + "! = " + factorial(n));
	}

	private static long factorial(int n) {
		if (n == 0) {
			return 1l;
		} else {
			return factorial(n - 1) * n;
		}
	}
}




2.3 【程序3】

public class CalcAge {

	/**
	 * 【程序23】
	 * 题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。
	 * 问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?
	 * 1.程序分析:利用递归的方法,递归分为回推和递推两个阶段。要想知道第五个人岁数,需知道第四人的岁数,依次类推,推到第一人(10岁),再往回推。
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println("第五个人的年龄是:" + calcAge(5));
	}

	private static int calcAge(int n) {
		if (n == 1)
			return 10;
		else
			return calcAge(n - 1) + 2;
	}
}


2.4 【程序4】

import java.util.Scanner;

public class OfNumbersReverse {

	/**
	 * 【程序24】 题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		long n;
		while (true) {
			System.out.println("请输入一个不多于5位的正整数:");
			n = sc.nextLong();
			if (n > 0 && n < 100000)
				break;
		}
		String s = "" + n;
		System.out.println(s + "是" + s.length() + "位数;\n其反序输出结果为:");
		for (int i = s.length(); i > 0; i--) {
			System.out.print(s.charAt(i - 1));
		}
	}
}


2.5 【程序5】

public class ReturnText {
	/**
	 * 【程序25】 题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int ct = 0;
		for (int i = 10000; i < 100000; i++) {
			if (isReturnText("" + i)) {
				System.out.println(i);
				ct++;
			}
		}
		System.out.println("在10000~99999之间共有:" + ct + "个回文数。");
	}

	private static boolean isReturnText(String s) {
		char[] ch = s.toCharArray();
		if (ch[0] == ch[4] && ch[1] == ch[3]) {
			return true;
		} else {
			return false;
		}
	}
}


2.6 【程序6】

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class FindWeek {

	/**
	 * 【程序26】 题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续 判断第二个字母。
	 * 1.程序分析:用情况语句比较好,如果第一个字母一样,则判断用情况语句或if语句判断第二个字母。
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Week[] week = Week.values();
		List<Week> list = new ArrayList<Week>();
		List<Week> list2 = new ArrayList<Week>();
		char ch, ch2;
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入第一个字符:");
		ch = Character.toUpperCase(sc.nextLine().charAt(0));
		for (int i = 0; i < 7; i++) {
			if (ch == week[i].toString().charAt(0)) {
				list.add(week[i]);
			}
		}
		switch (list.size()) {
		case 0:
			System.out.println("星期名称中没有以字母" + ch + "开头的。");
			break;
		case 1:
			System.out.println("以字母" + ch + "开头的周日期是:" + list.get(0) + ",即是:"
					+ list.get(0).toChString() + "。");
			break;
		default:
			System.out.println("请输入第二个字符:");
			ch2 = Character.toLowerCase(sc.nextLine().charAt(0));
			for (int i = 0; i < list.size(); i++) {
				if (ch2 == list.get(i).toString().charAt(1)) {
					list2.add(list.get(i));
				}
			}
			if (list2.size() == 1) {
				System.out.println("以" + ch + ch2 + "开头的周日期是:" + list2.get(0)
						+ ",即是:" + list2.get(0).toChString() + "。");
			} else {
				System.out.println("星期名称中没有以" + ch + ch2 + "开头的。");
			}
		}
	}

}

enum Week {
	Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday;

	public String toChString() {
		String str = "";
		switch (this.ordinal()) {
		case 0:
			str = "星期日";
			break;
		case 1:
			str = "星期一";
			break;
		case 2:
			str = "星期二";
			break;
		case 3:
			str = "星期三";
			break;
		case 4:
			str = "星期四";
			break;
		case 5:
			str = "星期五";
			break;
		case 6:
			str = "星期六";
			break;
		}
		return str;
	}
}

2.7 【程序7】

public class PrimeDown100 {

	/**
	 * 【程序27】 题目:求100之内的素数
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int ct = 0;
		for (int i = 2; i < 101; i++) {
			int j;
			for (j = 2; j < i; j++) {
				if (i % j == 0)
					break;
			}
			if (i == j) {
				ct++;
				System.out.println(i + "  ");
			}
		}
		System.out.println("2~100之间共有:" + ct + "个质数。");
	}

}


2.8 【程序8】

①方法一:

import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.Scanner;

public class SortArray10_2 {

	/**
	 * 【程序28】 题目:对10个数进行排序 。 1、分析 使用Array及Arrays进行排序处理。
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		float f[] = new float[10];
		System.out.println("请输入十个实数(中间可以用空格分开,也可以是回车,但不能够为其它字符,多则仅前十个有效):");
		Scanner sc = new Scanner(System.in);
		for (int i = 0; i < 10; i++) {
			f[i] = sc.nextFloat();
		}
		System.out.println("你输入的十个数分别为:");
		for (int i = 0; i < Array.getLength(f); i++) {
			System.out.print(Array.getFloat(f, i) + "  ");
		}
		Arrays.sort(f);
		System.out.println("\n你输入的十个数排序(从小到大)后为:");
		for (int i = 0; i < Array.getLength(f); i++) {
			System.out.print(Array.getFloat(f, i) + "  ");
		}
	}
}

②方法二:

import java.util.Scanner;

public class SortArray10 {

	/**
	 * 【程序28】 题目:对10个数进行排序 1.程序分析:可以利用选择法,即从后9个比较过程中,选择一个最小的与第一个元素交换,
	 * 下次类推,即用第二个元素与后8个进行比较,并进行交换。
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		float[] f = new float[10];
		System.out.println("请输入十个实数(中间可以用空格分开,也可以是回车,但不能够为其它字符,多则仅前十个有效):");
		Scanner sc = new Scanner(System.in);
		for (int i = 0; i < 10; i++) {
			f[i] = sc.nextFloat();
		}
		System.out.println("你输入的十个数分别为:");
		output(f);

		float tmp;
		for (int i = 0; i < f.length - 1; i++) {
			for (int j = i + 1; j < f.length; j++) {
				if (f[i] > f[j]) {
					tmp = f[i];
					f[i] = f[j];
					f[j] = tmp;
				}
			}
		}
		System.out.println("你输入的十个数排序后(从小到大)为:");
		output(f);
	}

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

2.9 【程序9】

import java.util.Scanner;

public class DiagonalMatrix {

	/**
	 * 1、设M=(αij)为n阶方阵.M的两个下标相等的所有元素都叫做M的对角元素,而序列(αii)1≤i≤n叫做M的主对角线.
	 * 2、所有非主对角线元素全等于零的n阶矩阵,称为对角矩阵或称为对角方阵。
	 */
	// *【程序29】 题目:求一个3*3矩阵对角线元素之和
	// * 1.程序分析:利用双重for循环控制输入二维数组,再将a[i][i]累加后输出。
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int[][] a = new int[3][3];
		Scanner sc = new Scanner(System.in);
		String[] str = new String[3];
		int sum = 0;
		for (int i = 0; i < 3; i++) {
			str[i] = "";
			for (int j = 0; j < 3; j++) {
				String tmp = "";
				if (i == j) {
					System.out.println("请输入对角矩阵的第" + (i + 1) + "个对角上的数:");
					a[i][j] = sc.nextInt();
					sum += a[i][j];
				} else {
					a[i][j] = 0;
				}
				tmp += a[i][j] + "            ";
				str[i] += tmp.substring(0, 8);
			}
		}

		System.out.println("                                        这个对角矩阵的形式为:");
		for (int i = 0; i < 3; i++) {
			System.out.println("                " + str[i]);
		}
		System.out.println("这个对角矩阵的对角上线数值的和为:" + sum);
	}

}




2.10 【程序10】

①方法一:

import java.util.Scanner;

public class InsertNumberInOrderedArray {

	/**
	 * 【程序30】 题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。 1.
	 * 程序分析:首先判断此数是否大于最后一个数,然后再考虑插入中间的数的情况,插入后此元素之后的数,依次后移一个位置。
	 */
	// 此程序实际上就是插入排序法,可以根据输入你要进行排序的
	// 数据个数,然后排序出来(是升序——从小到大排列的)。
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int[] a = new int[1];
		int[] b = new int[1];
		int k = 2;
		int tmp, tmp2;
		Scanner sc = new Scanner(System.in);
		while (true) {
			System.out.println("请输入一个大于1的整数:");
			tmp2 = sc.nextInt();
			if (tmp2 > 1)
				break;
		}
		System.out.println("请你再输入" + tmp2 + "个数(可用空格隔开,也可以打回车,多的将被去掉)");
		a[0] = sc.nextInt();
		while (k <= tmp2) {
			tmp = sc.nextInt();
			boolean f = false;
			b = new int[k];
			ShiftArrayElements(b, a);// 临时将数组a的内容存入数组b中
			int m;
			for (m = k - 2; m >= 0; m--) {
				if (tmp < b[m]) {
					b[m + 1] = b[m];
					f = true;
				} else {
					break;
				}
			}
			if (!f) {//如果在它本身最大,则放入最后一个元素中
				b[k - 1] = tmp;
			} else {
				b[m + 1] = tmp;//否则在中间或开头插入
			}
			a = new int[k++];
			ShiftArrayElements(a, b);// 临时将数组b的内容存入数组a中
		}

		System.out.println("============================\n这" + tmp2
				+ "个数从小到到的顺序如下:");
		for (int i = 0; i < a.length; i++) {
			System.out.print(a[i] + "  ");
		}
	}

	private static void ShiftArrayElements(int[] a, int[] b) {
		for (int i = 0; i < b.length; i++) {
			a[i] = b[i];
		}
	}
}

②方法二:文章来源地址https://www.toymoban.com/news/detail-422323.html

import java.util.Scanner;

public class InsertNumberInOrderedArray2 {

	/**
	 * 【程序30】 题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。 1.
	 * 程序分析:首先判断此数是否大于最后一个数,然后再考虑插入中间的数的情况,插入后此元素之后的数,依次后移一个位置。
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int[] a = new int[8];
		int[] b = { 23, 45, 46, 78, 90, 102, 120 };
		for (int i = 0; i < b.length; i++) {
			a[i] = b[i];
		}
		Scanner sc = new Scanner(System.in);
		int d, i, k;
		boolean f = true;
		System.out.println("请输入一个数:");
		d = sc.nextInt();
		for (i = b.length - 1; i > -1; i--) {
			if (d < a[i]) {
				a[i + 1] = a[i];
				f = false;
			} else {
				break;
			}
		}
		if (f) {
			a[b.length] = d;
			k = b.length;
		} else {
			a[i + 1] = d;
			k = i + 1;
		}
		output("插入数据前,原来的有序数组为:", b, -1);
		output("插入数\"" + d + "\"后,得到的结果是:", a, k);
	}

	private static void output(String str, int[] a, int k) {
		System.out.println(str);//k为插入的数作标记,该数前后都加^
		for (int i = 0; i < a.length; i++) {
			if (k != -1 && k == i) {
				System.out.print("^" + a[i] + "^  ");
			} else {
				System.out.print(a[i] + "  ");
			}
		}
		System.out.println();
	}
}




到了这里,关于【Java】『蓝桥杯』10道编程题及答案(三)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 最全java面试题及答案(208道)

    本文分为十九个模块,分别是: 「Java 基础、容器、多线程、反射、对象拷贝、Java Web 、异常、网络、设计模式、Spring/Spring MVC、Spring Boot/Spring Cloud、Hibernate、MyBatis、RabbitMQ、Kafka、Zookeeper、MySQL、Redis、JVM」 ,如下图所示: 共包含 208 道面试题,本文的宗旨是为读者朋友们整

    2024年02月03日
    浏览(37)
  • 2023 年Java面试题及答案大全(持续更新)

    本文分为十九个模块,分别是:「Java 基础、容器、多线程、反射、对象拷贝、Java Web 、异常、网络、设计模式、Spring/Spring MVC、Spring Boot/Spring Cloud、Hibernate、MyBatis、RabbitMQ、Kafka、Zookeeper、MySQL、Redis、JVM」 Java 基础 1. JDK 和 JRE 有什么区别? JDK:Java Development Kit 的简称,Jav

    2024年02月08日
    浏览(48)
  • 面试官最常问的10道测试用例和5道思维面试题及答案,每1题都很经典

    软件测试面试中,测试用例是非常容被问到的一个点,今天小编就给大家把最常见的20道测试用例方面的问题给大家整理出来,希望对大家的面试提供帮  需要此大厂面试题集的可以加我群:786229024获取,也可以一起交流技术。 测试用例10道面试题 1、什么是测试用例 答:测

    2024年02月08日
    浏览(48)
  • 大厂最全1100道Java面试题及答案整理(2023最新版)

    春招,秋招,社招,我们 Java 程序员的面试之路,是挺难的,过了 HR,还得被技术面,小刀在去各个厂面试的时候,经常是通宵睡不着觉,头发都脱了一大把,还好最终侥幸能够入职一个独角兽公司,安稳从事喜欢的工作至今... 近期也算是抽取出大部分休息的时间,为大家准

    2024年02月09日
    浏览(40)
  • 2023 年最新版Java面试题及答案整理(完整版,超详细)

    程序员一步入中年,不知不觉便会被铺天盖地的“危机感”上身,曾经的那个少年已经不在,时间就是这样公平。就算你能发明Java语言,随着时间的推移,你注定还是要成为慢慢变蔫的茄子,缓缓变黑的葡萄。 看着金九银十就要来临的消息,吓得我周末赶紧拿出了面试资料

    2024年02月14日
    浏览(44)
  • php面试题及答案

    1 请输出下面代码执行结果 复制 讲解:count(var)是用来统计数组或对象的元素个数的。当var是null或者空数组时,结果为0。如果var是普通变量,则返回1。正常情况下返回var中的元素或属性个数。 2 请说明php.ini中的safe_mode开启之后影响了哪些函数 答案:Safe_mode是php的安全模式。

    2024年02月11日
    浏览(43)
  • php算法面试题及答案

    1. PHP的基础知识点 PHP中类的继承属于单继承,一个子类只能继承一个父类。可见性为public protected的属性和方法可以被继承。 继承的方法或属性可以被重写,可见性越来越大。 PHP中的变量名区分大小写,但类名、函数名不区分大小写。 2. error_reporting()函数的作用 error_reporti

    2024年02月09日
    浏览(49)
  • 运维常用面试题及答案

    介绍一下你的运维经验和技能。 答案:在回答这个问题时,可以简要概述你的运维经验和技能,包括你的工作经历、参与的项目、使用的工具和技术等。重点突出你在系统监控、故障排除、自动化部署、容量规划和安全性等方面的经验和技能。 你在日常工作中使用过哪些自

    2024年02月15日
    浏览(41)
  • Qt经典面试题及答案

    面试题: 请解释什么是Qt框架,以及它在软件开发中的作用和优势。 请谈谈你在使用Qt进行GUI开发方面的经验和技能。 请描述Qt的信号和槽机制,并解释其在软件开发中的作用。 请介绍Qt中的模型/视图架构,并说明如何使用Qt模型/视图框架来实现数据的展示和交互。 在Qt中,

    2024年02月03日
    浏览(38)
  • 头歌实践教学平台答案(消息队列面试题及答案)

    头歌实践教学平台消息队列 面试题及答案,消息队列⾯试题及答案。 1、为什么使用消息队列? 消息队列使用的场景和中间件有很多,但解决的核心问题主要是:异步、解耦、消峰填谷。 异步、解耦、消峰填谷这是消息队列最大的优点,除了这些消息队列还可以会解决一些

    2024年02月11日
    浏览(66)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包