> 文章列表 > 【Java】『蓝桥杯』10道编程题及答案(一)

【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


文章目录

  • 系列文章
  • 前言
  • 一、题目
    • 1.1 【程序1】
    • 1.2 【程序2】
    • 1.3 【程序3】
    • 1.4 【程序4】
    • 1.5 【程序5】
    • 1.6 【程序6】
    • 1.7 【程序7】
    • 1.8 【程序8】
    • 1.9 【程序9】
    • 1.10 【程序10】
  • 二、答案
    • 2.1 【程序1】
    • 2.2 【程序2】
    • 2.3 【程序3】
    • 2.4 【程序4】
    • 2.5 【程序5】
    • 2.6 【程序6】
    • 2.7 【程序7】
    • 2.8 【程序8】
    • 2.9 【程序9】
    • 2.10 【程序10】

前言

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

哈喽大家好,本专栏为【项目实战】专栏,有别于【底层库】专栏,我们可以发现增加 了『问题描述』、『项目展示』章节,十分符合项目开发流程,让读者更加清楚项目解决的问题、以及产品能够达到的效果。本专栏收纳项目开发过程的解决方案,是我项目开发相对成熟、可靠方法的提炼,我将这些问题的解决思路梳理,撰写本文分享给大家,大家遇到类似问题,可按本文方案处理。

本专栏会持续更新,不断完善,专栏文章关联性较弱(文章之间依赖性较弱,没有阅读顺序)。大家有任何问题,可以私信我。如果您对本专栏感兴趣,欢迎关注吧,我将带你用最简洁的代码,实现复杂的功能。

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


一、题目

1.1 【程序1】

【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
1.程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21…

1.2 【程序2】

【程序2】 题目:判断101-200之间有多少个素数,并输出所有素数。
1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除, 则表明此数不是素数,反之是素数。

1.3 【程序3】

【程序3】 题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。
1.程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。

1.4 【程序4】

【程序4】 题目:将一个正整数分解质因数。例如:输入90,打印出90=233*5。
程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:
(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
(2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。
(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。

1.5 【程序5】

【程序5】 题目:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。
1.程序分析:(a>b)?a:b这是条件运算符的基本例子。

1.6 【程序6】

【程序6】 题目:输入两个正整数m和n,求其最大公约数和最小公倍数。
1.程序分析:利用辗除法。

1.7 【程序7】

【程序7】 题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
1.程序分析:利用while语句,条件为输入的字符不为’\\n’.

1.8 【程序8】

【程序8】题目:求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。
1.程序分析:关键是计算出每一项的值。

1.9 【程序9】

【程序9】题目:一个数如果恰好等于它的因子之和,这个数就称为"完全数"。例如6=1+2+3.编程 找出1000以内的所有完全数。

1.10 【程序10】

【程序10】 题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第10次落地时,共经过多少米?第10次反弹多高?


二、答案

2.1 【程序1】

import java.util.Scanner;
public class RabbitsQuit {/*** 【程序1】 题目:古典问题:有一对兔子,从出生后第3个月 起每个月都生一对兔子,小兔子长到第三个月后每个月又生 一* 对兔子,假如兔子都不死,问每个月的兔子总数为多少? 1.程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21....*/public static void main(String[] args) {Scanner sc = new Scanner(System.in);RabbitsQuit rq = new RabbitsQuit();System.out.println("请输入一个整数:");int n = sc.nextInt();for (int i = 0; i < n; i++) {System.out.println("第" + (i + 1) + "个月:" + rq.calc(i + 1));}}private int calc(int x) {if (x == 1 || x == 2)return 1;elsereturn calc(x - 2) + calc(x - 1);}
}

2.2 【程序2】

import java.util.Scanner;
public class RabbitsQuit {/*** 【程序1】 题目:古典问题:有一对兔子,从出生后第3个月 起每个月都生一对兔子,小兔子长到第三个月后每个月又生 一* 对兔子,假如兔子都不死,问每个月的兔子总数为多少? 1.程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21....*/public static void main(String[] args) {Scanner sc = new Scanner(System.in);RabbitsQuit rq = new RabbitsQuit();System.out.println("请输入一个整数:");int n = sc.nextInt();for (int i = 0; i < n; i++) {System.out.println("第" + (i + 1) + "个月:" + rq.calc(i + 1));}}private int calc(int x) {if (x == 1 || x == 2)return 1;elsereturn calc(x - 2) + calc(x - 1);}
}
法二:
import java.util.Vector;
public class PrimeNumber2 {/*** 【程序2】 题目:判断101-200之间有多少个素数,并输出所有 素数。 1.程序分析:判断素数的方法:用一个数分别去除2到sqrt* (这个数),如果能被整除, 则表明此数不是素数,反之是素数。*/@SuppressWarnings({ "unchecked", "rawtypes" })public static void main(String[] args) {Vector v = new Vector();// 使用向量来装素数int i, j, ct = 0;for (i = 101; i < 200; i++) {for (j = 2; j < i; j++) {if (i % j == 0) {break;}}if (i == j) {v.add(i);ct++;}}System.out.println("101~200之间一共有:" + ct + "个素数。");System.out.println("===============================");System.out.println(v.toString().substring(1,v.toString().length()-1));}
}

2.3 【程序3】

public class DaffodilsNumber {/*** 【程序3】 题目:打印出所有的"水仙花数",所谓"水仙花数"是指 一个三位数,其各位数字立方和等于该数本身。例如:* 153是一个"水仙花数",因为153=1的三次方+5的三次方 +3的三次方。 1.程序分析:* 利用for循环控制100-999个数,每个数分解出个位, 十位,百位。*/public static void main(String[] args) {DaffodilNumber dn;int ct = 0;for (int i = 100; i < 1000; i++) {dn = new DaffodilNumber(i);if (dn.isDaffodilNumber()) {ct++;System.out.println(i + " = " + dn);}}System.out.println("==============================");System.out.println("100~999之间一共有:" + ct + "个水仙花数。");}}
class DaffodilNumber {private int bw;private int sw;private int gw;private int num;public DaffodilNumber(int num) {this.num = num;this.bw = num / 100;this.sw = (num-bw*100)/10;this.gw = num % 10;}public boolean isDaffodilNumber() {if (num == bw * bw * bw + sw * sw * sw + gw * gw * gw)return true;elsereturn false;}public String toString() {return bw + "*" + bw + "*" + bw + "+" + sw + "*" + sw + "*" + sw + "+"+ gw + "*" + gw + "*" + gw;}
}

2.4 【程序4】

import java.util.Scanner;
public class PrimeSplit {/**
* 程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:* (1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。* (2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。* (3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。*/public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n;while (true) {System.out.println("请输入一个大于1的整数:");n = sc.nextInt();if (n > 1)break;}System.out.print(n + " = ");int i = 2;String str = "";while (i <= n) {if (n % i == 0 && isPrime(i)) {str += "*" + i;n /= i;i = 2;continue;}i++;}System.out.println(str.substring(1));}private static boolean isPrime(int n) {for (int i = 2; i < n; i++) {if (n % i == 0) {return false;}}return true;}
}

2.5 【程序5】

import java.util.Scanner;
public class PerformanceRating {/*** 【程序5】 题目:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。* 1.程序分析:(a>b)?a:b这是条件运算符的基本例子。*/public static void main(String[] args) {// TODO Auto-generated method stubScanner sc = new Scanner(System.in);float f;while (true) {System.out.println("请输入一个成绩:");f = sc.nextFloat();if (f >= 0 && f <= 100)break;}System.out.print("成绩为:" + f + "的,其等级是:");System.out.println((f >= 90 ? "A" : (f < 60 ? "C" : "B")) + "。");}
}

2.6 【程序6】

法一:

import java.util.Scanner;
public class DivisorMultiple {/*** 【程序6】 题目:输入两个正整数m和n,求其最大公约数和最小公倍数。 1.程序分析:利用辗除法。*/public static void main(String[] args) {int m, n, c;Scanner sc = new Scanner(System.in);while (true) {System.out.println("请输入第一个正整数:");m = sc.nextInt();if (m > 0)break;}while (true) {System.out.println("请输入第二个正整数:");n = sc.nextInt();if (n > 0)break;}c = gcd(m, n);System.out.println("[" + m + "," + n + "] = " + c);System.out.println("(" + m + "," + n + ") = " + m * n / c);}private static int gcd(int a, int b) {//使用辗转相除法int r=a%b;if(r==0){return b;}else{return gcd(b,r);}}
}

法二:

import java.util.Scanner;
public class MultipleDivisor {/*** 【程序6】 题目:输入两个正整数m和n,求其最大公约数和最小公倍数。 1.程序分析:利用辗除法。*/public static void main(String[] args) {// TODO Auto-generated method stubint m, n, c;Scanner sc = new Scanner(System.in);while (true) {System.out.println("请输入第一个正整数:");m = sc.nextInt();if (m > 0)break;}while (true) {System.out.println("请输入第二个正整数:");n = sc.nextInt();if (n > 0)break;}c = gcd(m, n);System.out.println("[" + m + "," + n + "] = " + c);System.out.println("(" + m + "," + n + ") = " + m * n / c);}private static int gcd(int a, int b) {//使用辗转相减法完成的if (a < b) {int tmp;tmp = a;a = b;b = tmp;}if (a % b == 0)return b;elsereturn gcd(b, a - b);}
}

2.7 【程序7】

法一:

import java.io.BufferedReader;
import java.io.InputStreamReader;
public class JudgeBlankLetterEtc {/*** 【程序7】 题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。* 1.程序分析:利用while语句,条件为输入的字符不为'\\n'.* * @throws Exception*/public static void main(String[] args) throws Exception {BufferedReader br = new BufferedReader(new InputStreamReader(System.in));System.out.println("请输入一串字符串(可包含字母、数字、空格及其它字符):");StringBuffer sb = new StringBuffer(br.readLine());int letterCount = 0;int blankCount = 0;int numberCount = 0;int otherCount = 0;for (int i = 0; i < sb.length(); i++) {char c = sb.charAt(i);if (('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z')) {letterCount++;} else if ('0' <= c && c <= '9') {numberCount++;} else if (' ' == c) {blankCount++;} else {otherCount++;}}System.out.println("字符串:" + sb + "中,");System.out.println("字母:" + letterCount);System.out.println("数字:" + numberCount);System.out.println("空格:" + blankCount);System.out.println("其它字符:" + otherCount);}
}

法二:

import java.io.BufferedReader;
import java.io.InputStreamReader;
public class JudgeLetterBlankNumberEtc {@SuppressWarnings("deprecation")public static void main(String[] args) throws Exception {// TODO Auto-generated method stubSystem.out.println("请输入一串字符:");InputStreamReader isr = new InputStreamReader(System.in);BufferedReader br = new BufferedReader(isr);String str = br.readLine();int lc = 0;int nc = 0;int bc = 0;int oc = 0;for (int i = 0; i < str.length(); i++) {char ch = str.charAt(i);if (Character.isLetter(ch)) {lc++;} else if (Character.isDigit(ch)) {nc++;} else if (Character.isSpace(ch)) {bc++;} else {oc++;}}System.out.println("字符串\\"" + str + "\\"中包含的:");System.out.println("字母有:" + lc + "个;");System.out.println("数字有:" + nc + "个;");System.out.println("空格有:" + bc + "个;");System.out.println("其它字符有:" + oc + "个;");}}

2.8 【程序8】

import java.util.Scanner;
public class CycleNumberAdd {/*** 程序分析:关键是计算出每一项的值。*/public static void main(String[] args) {Scanner sc = new Scanner(System.in);int m, n;while (true) {System.out.println("请输入一个1~9之间的一个数字:");m = sc.nextInt();if (m > 0 && m < 10)break;}while (true) {System.out.println("请输入循环次数(>1,<19):");n = sc.nextInt();if (n > 1 && n < 19)break;}long sum = m;long t = m;String s = "" + m;for (int i = 0; i < n - 1; i++) {t = 10 * t + m;s += " + " + t;sum += t;}System.out.println(s + " = " + sum);}
}

2.9 【程序9】

public class PerfectNumber {public static void main(String[] args) {// TODO Auto-generated method stubSystem.out.println("1000以内,所有的完全数有:");for (int i = 2; i < 1001; i++) {String str = "1";int sum = 1;for (int j = 2; j <= i / 2; j++) {if (i % j == 0) {sum += j;str += " + " + j;}}if (i == sum) {System.out.println(sum + " = " + str);}}}}

2.10 【程序10】

public class BallBounce {/*** 【程序10】 题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第10次落地时,共经过多少米?第10次反弹多高?*/public static void main(String[] args) {double high = 100.0;double sum = 0.0;for (int i = 0; i < 10; i++) {sum += high;high /= 2;}System.out.println("小球10后的经过的距离为:" + sum + "米。");System.out.println("小球第10次落地后,再弹起的高度为:" + high + "米。");}}