系列文章
【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
文章目录
- 系列文章
- 前言
- 一、题目
- 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】
前言
我能抽象出整个世界,但是我不能抽象你。 想让你成为私有常量,这样外部函数就无法访问你。 又想让你成为全局常量,这样在我的整个生命周期都可以调用你。 可惜世上没有这样的常量,我也无法定义你,因为你在我心中是那么的具体。
哈喽大家好,本专栏为【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]);
}
}