草庐IT

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

花北城 2024-01-23 原文

系列文章

【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】

【程序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];
		}
	}
}

②方法二:

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道编程题及答案(三)的更多相关文章

  1. java - 等价于 Java 中的 Ruby Hash - 2

    我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/

  2. ruby - 寻找通过阅读代码确定编程语言的ruby gem? - 2

    几个月前,我读了一篇关于ruby​​gem的博客文章,它可以通过阅读代码本身来确定编程语言。对于我的生活,我不记得博客或gem的名称。谷歌搜索“ruby编程语言猜测”及其变体也无济于事。有人碰巧知道相关gem的名称吗? 最佳答案 是这个吗:http://github.com/chrislo/sourceclassifier/tree/master 关于ruby-寻找通过阅读代码确定编程语言的rubygem?,我们在StackOverflow上找到一个类似的问题:

  3. java - 从 JRuby 调用 Java 类的问题 - 2

    我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www

  4. java - 我的模型类或其他类中应该有逻辑吗 - 2

    我只想对我一直在思考的这个问题有其他意见,例如我有classuser_controller和classuserclassUserattr_accessor:name,:usernameendclassUserController//dosomethingaboutanythingaboutusersend问题是我的User类中是否应该有逻辑user=User.newuser.do_something(user1)oritshouldbeuser_controller=UserController.newuser_controller.do_something(user1,user2)我

  5. java - 什么相当于 ruby​​ 的 rack 或 python 的 Java wsgi? - 2

    什么是ruby​​的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht

  6. Observability:从零开始创建 Java 微服务并监控它 (二) - 2

    这篇文章是继上一篇文章“Observability:从零开始创建Java微服务并监控它(一)”的续篇。在上一篇文章中,我们讲述了如何创建一个Javaweb应用,并使用Filebeat来收集应用所生成的日志。在今天的文章中,我来详述如何收集应用的指标,使用APM来监控应用并监督web服务的在线情况。源码可以在地址 https://github.com/liu-xiao-guo/java_observability 进行下载。摄入指标指标被视为可以随时更改的时间点值。当前请求的数量可以改变任何毫秒。你可能有1000个请求的峰值,然后一切都回到一个请求。这也意味着这些指标可能不准确,你还想提取最小/

  7. 【Java 面试合集】HashMap中为什么引入红黑树,而不是AVL树呢 - 2

    HashMap中为什么引入红黑树,而不是AVL树呢1.概述开始学习这个知识点之前我们需要知道,在JDK1.8以及之前,针对HashMap有什么不同。JDK1.7的时候,HashMap的底层实现是数组+链表JDK1.8的时候,HashMap的底层实现是数组+链表+红黑树我们要思考一个问题,为什么要从链表转为红黑树呢。首先先让我们了解下链表有什么不好???2.链表上述的截图其实就是链表的结构,我们来看下链表的增删改查的时间复杂度增:因为链表不是线性结构,所以每次添加的时候,只需要移动一个节点,所以可以理解为复杂度是N(1)删:算法时间复杂度跟增保持一致查:既然是非线性结构,所以查询某一个节点的时候

  8. 网络编程套接字 - 2

    网络编程套接字网络编程基础知识理解源`IP`地址和目的`IP`地址理解源MAC地址和目的MAC地址认识端口号理解端口号和进程ID理解源端口号和目的端口号认识`TCP`协议认识`UDP`协议网络字节序socket编程接口`sockaddr``UDP`网络程序服务器端代码逻辑:需要用到的接口服务器端代码`udp`客户端代码逻辑`udp`客户端代码`TCP`网络程序服务器代码逻辑多个版本服务器单进程版本多进程版本多线程版本线程池版本服务器端代码客户端代码逻辑客户端代码TCP协议通讯流程TCP协议的客户端/服务器程序流程三次握手(建立连接)数据传输四次挥手(断开连接)TCP和UDP对比网络编程基础知识

  9. 【Java入门】使用Java实现文件夹的遍历 - 2

    遍历文件夹我们通常是使用递归进行操作,这种方式比较简单,也比较容易理解。本文为大家介绍另一种不使用递归的方式,由于没有使用递归,只用到了循环和集合,所以效率更高一些!一、使用递归遍历文件夹整体思路1、使用File封装初始目录,2、打印这个目录3、获取这个目录下所有的子文件和子目录的数组。4、遍历这个数组,取出每个File对象4-1、如果File是否是一个文件,打印4-2、否则就是一个目录,递归调用代码实现publicclassSearchFile{publicstaticvoidmain(String[]args){//初始目录Filedir=newFile("d:/Dev");Datebeg

  10. java - 为什么 ruby​​ modulo 与 java/other lang 不同? - 2

    我基本上来自Java背景并且努力理解Ruby中的模运算。(5%3)(-5%3)(5%-3)(-5%-3)Java中的上述操作产生,2个-22个-2但在Ruby中,相同的表达式会产生21个-1-2.Ruby在逻辑上有多擅长这个?模块操作在Ruby中是如何实现的?如果将同一个操作定义为一个web服务,两个服务如何匹配逻辑。 最佳答案 在Java中,模运算的结果与被除数的符号相同。在Ruby中,它与除数的符号相同。remainder()在Ruby中与被除数的符号相同。您可能还想引用modulooperation.

随机推荐