蓝桥杯练习题
01字串
问题描述
对于长度为5位的一个01串,每一位都可能是0或1,一共有32种可能。它们的前几个是:
00000
00001
00010
00011
00100
请按从小到大的顺序输出这32种01串。
这种可以用五层for循环进行解答,刚开始看到这样的题有点懵,后来百度查了一下,理解了其他方法的意思,但是不够简单,五层for循环是最简单,也最容易理解的
package 蓝桥练习;
//for循环五次
public class 字符串数字 {
public static void main(String[] args) {
for(int i=0;i<2;i++) {
for(int j=0;j<2;j++) {
for(int m=0;m<2;m++) {
for(int n=0;n<2;n++) {
for(int h=0;h<2;h++) {
System.out.println(""+i+j+m+n+h);
}
}
}
}
}
}
}
每一层循环都可以改变数字进行排序。
闰年判断
基础题,不用详解,代码如下,通过率100%
package 蓝桥练习;
import java.util.Scanner;
public class 判断闰年 {
public static void main(String[] args) {
Scanner sc =new Scanner(System.in);
int n=sc.nextInt();
if(n%4==0&&n%100!=0||n%400==0) {
System.out.println("yes");
}else {
System.out.println("no");
}
}
}
蓝桥杯历届真题1:小计算器
由于刚接触有点复杂的题,这样的题目分析了很长时间,最主要的是题目有点难懂,因此需要长时间的思考,目前根据网上参考只做了一部分,也理解了一部分。
代码如下:
package 历届真题;
import java.util.Scanner;
public class 模拟程序性计算器 {
public static void main(String[] args) {
long sum = 0; // 指令数量
String result = null;// 存储结果
Integer K0 = 10;// 默认进制位数为10
Scanner cin = new Scanner(System.in);
sum = Long.parseLong(cin.nextLine());
//java.lang.Long.parseLong(String s) 方法解析的字符串参数s作为一个符号的十进制长。
while (sum > 0) {
String s = cin.nextLine();
sum = sum - 1;
//对接下来输入的字符串进行判断
if (s.equals("CLEAR")) {//如果输入的是clear就清空结果
result = null;
} else if (s.equals("ADD")) {//如果等于ADD,则执行以下判断
while (true) {
//如果if大于0,则继续键盘输入,sum数量减一,如果输入的数字字符串长度与NUM长度相同
//则将键盘录入的结果转换为十进制,存储到新的变量里,同时创建一个新的变量将结果以10进制转换存储。
//由题目可知ADD方法表示加法,因此要创建加法的方法,以此还有减乘除,除取商方法,
if (sum > 0) {
s = cin.nextLine();
sum--;
if (s.substring(0, 3).equals("NUM")) {
long new_data = Long.parseLong(s.substring(4), K0);
long r = Long.parseLong(result, K0);// r存储结果的十进制数,下同
r = add(r, new_data);
//change方法目的是将结果转换为十进制字符串,在将字符串转换为其他进制字符串
//'NUM X',X为一个只包含大写字母和数字的字符串,表示一个当前进制的数
result = change(r, 10, K0);
break;
} else if (s.equals("CLEAR")) {
result = null;
break;
} else if (s.substring(0, 3).equals("CHA")) {
if (result != null) {
long r = Long.parseLong(result, K0);
K0 = Integer.parseInt(s.substring(7));//由于第二部可以选择CLEAR或者是ADD所以到下一步s输入的字符长度至多是7,将字符串转换为十进制数
result = change(r, 10, K0);//将结果转换为十进制字符串,在将字符串转换为其他进制字符串
} else
K0 = Integer.parseInt(s.substring(7));//或者就是直接将字符串转换为十进制
}
} else
break;//中止判断
}
//下面的分析与第一步骤相同,这是加减乘除的代码块
} else if (s.equals("SUB")) {//这是减
while (true) {
if (sum > 0) {
s = cin.nextLine();
sum--;
if (s.substring(0, 3).equals("NUM")) {
long new_data = Long.parseLong(s.substring(4), K0);
long r = Long.parseLong(result, K0);// r存储结果的十进制数,下同
r = sub(r, new_data);
result = change(r, 10, K0);
break;
} else if (s.equals("CLEAR")) {
result = null;
break;
} else if (s.substring(0, 3).equals("CHA")) {
if (result != null) {
long r = Long.parseLong(result, K0);
K0 = Integer.parseInt(s.substring(7));
result = change(r, 10, K0);
} else
K0 = Integer.parseInt(s.substring(7));
}
} else
break;
}
} else if (s.equals("MUL")) {//这是乘
while (true) {
if (sum > 0) {
s = cin.nextLine();
sum--;
if (s.substring(0, 3).equals("NUM")) {
long new_data = Long.parseLong(s.substring(4), K0);
long r = Long.parseLong(result, K0);// r存储结果的十进制数,下同
r = mul(r, new_data);
result = change(r, 10, K0);
break;
} else if (s.equals("CLEAR")) {
result = null;
break;
} else if (s.substring(0, 3).equals("CHA")) {
if (result != null) {
long r = Long.parseLong(result, K0);
K0 = Integer.parseInt(s.substring(7));
result = change(r, 10, K0);
} else
K0 = Integer.parseInt(s.substring(7));
}
} else
break;
}
} else if (s.equals("DIV")) {//这是除
while (true) {
if (sum > 0) {
s = cin.nextLine();
sum--;
if (s.substring(0, 3).equals("NUM")) {
long new_data = Long.parseLong(s.substring(4), K0);
long r = Long.parseLong(result, K0);// r存储结果的十进制数,下同
r = div(r, new_data);
result = change(r, 10, K0);
break;
} else if (s.equals("CLEAR")) {
result = null;
break;
} else if (s.substring(0, 3).equals("CHA")) {
if (result != null) {
long r = Long.parseLong(result, K0);
K0 = Integer.parseInt(s.substring(7));
result = change(r, 10, K0);
} else
K0 = Integer.parseInt(s.substring(7));
}
} else
break;
}
} else if (s.equals("MOD")) {//这是取余
while (true) {
if (sum > 0) {
s = cin.nextLine();
sum--;
if (s.substring(0, 3).equals("NUM")) {
long new_data = Long.parseLong(s.substring(4), K0);
long r = Long.parseLong(result, K0);// r存储结果的十进制数,下同
r = mod(r, new_data);
result = change(r, 10, K0);
break;
} else if (s.equals("CLEAR")) {
result = null;
break;
} else if (s.substring(0, 3).equals("CHA")) {
if (result != null) {
long r = Long.parseLong(result, K0);
K0 = Integer.parseInt(s.substring(7));
result = change(r, 10, K0);
} else
K0 = Integer.parseInt(s.substring(7));
}
} else
break;
}
} else if (s.substring(0, 3).compareTo("NUM") == 0) {
result = s.substring(4);
} else if (s.substring(0, 3).equals("CHA")) {
if (result != null) {
long r = Long.parseLong(result, K0);
K0 = Integer.parseInt(s.substring(7));
result = change(r, 10, K0);
} else
K0 = Integer.parseInt(s.substring(7));
} else if (s.equals("EQUAL")) {//如果输入equal则输出值
System.out.println(result);
}
}
cin.close();//关闭键盘录入,一开始不知道这个方法,百度了才知道,活到老学到老啊
}
//接下来就是创建的方法,加减乘除取余
public static long add(long a, long b) {
return a + b;
}
public static long sub(long a, long b) {
return a - b;
}
public static long mul(long a, long b) {
return a * b;
}
public static long div(long a, long b) {
return a / b;
}
public static long mod(long a, long b) {
return a % b;
}
//这个是change方法,将输入的字符串转换为十进制,再将十进制转换为其他进制字符串。返回该字符串
public static String change(long a, Integer K0, int K) {
String str = String.valueOf(a);
a = Long.parseLong(str, K0);// 转化为10进制
str = Long.toString(a, K);// 转化为目标进制的字符串
str = str.toUpperCase();// 返回大写形式
return str;
}
}