蓝桥杯刷题------day7
题目一
题干
输入一个整数P,输出P进制下的乘法表。P进制中大于等于 10 的数字用大写字母A、B、C等表示。
示例一:
输入:
4
输出:
1×1=1
2×1=2 2×2=10
3×1=3 3×2=12 3×3=21
示例二:
输入:
8
输出:
1×1=1
2×1=2 2×2=4
3×1=3 3×2=6 3×3=11
4×1=4 4×2=10 4×3=14 4×4=20
5×1=5 5×2=12 5×3=17 5×4=24 5×5=31
6×1=6 6×2=14 6×3=22 6×4=30 6×5=36 6×6=44
7×1=7 7×2=16 7×3=25 7×4=34 7×5=43 7×6=52 7×7=61
题目链接:乘法表
题目解析
这条题目相对来说比较简单,我们在练习for语句循环的时候经常会拿打印乘法口诀表来练手,因此这里注重介绍一下进制转化的问题,例如:对于123456这个数我们如何能一个数一个数的拿出来呢?我们是不是先对123456进行10取余,拿出来6,然后用123456÷10得到12345,然后再用12345对10取余,然后拿出来5,以此类推,进制转化也是这样的,只是把这里的10换成了你想进制转换的进制数而已,但是需要注意的是我们拿的过程中是6,5,4,3,2,1。因此我们可以用头插法的方法每拿到一个数字就把他放到最前面就可以了,当然在拿到每个数之后,要进行判断,是否大于10,如果大于10,就需要把10以后的部分转化为对应的大写字母,下面是完整代码:
代码
java
import java.util.Scanner;
public class Main {
// 将数字转换成P进制字符串表示
private static String toBaseP(int number, int base) {
if (number == 0) {
return "0";
}
StringBuilder result = new StringBuilder();
while (number > 0) {
int remainder = number % base;
char digit = (char) (remainder < 10 ? '0' + remainder : 'A' + (remainder - 10));
result.insert(0, digit);
number /= base;
}
return result.toString();
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int P = scanner.nextInt();
printMultiplicationTable(P);
}
// 输出P进制的乘法表
private static void printMultiplicationTable(int P) {
for (int i = 1; i < P; i++) { // 遍历行数
for (int j = 1; j <= i; j++) { // 每行逐渐增加的内容
String result = toBaseP(i * j, P); // 计算结果并转换为P进制
System.out.print(toBaseP(i, P) + "*" + toBaseP(j, P) + "=" + result + " ");
}
System.out.println();
}
}
}
题目二
题干
小明决定从下周一开始努力刷题准备蓝桥杯竞赛。他计划周一至周五每天做a 道题目,周六和周日每天做b 道题目。请你帮小明计算,按照计划他将在第几天实现做题数大于等于n 题?
输入: 一行包含三个整数a,b,c。
输出: 一个整数代表天数。
输入:
10 20 99
输出:
8
题目链接: 刷题统计
题目解析
这条题目也相对比较简单,我们可以创建一个数组用于记录一周之内累计的做题个数,那么最后一个数组元素表示的就是一周的做题数,我们记为sum,用n/sum就可以得到需要刷题刷几个星期,n%sum就可以得到不足一周做题数的剩余题数,那么直接跟累计做题数进行比较就可以得到在最后一周的哪一天完成了。下面是完整代码:
代码
java
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
long a = scanner.nextLong();
long b = scanner.nextLong();
long n = scanner.nextLong();
int i = 0;
long[] arr = new long[7];
arr[0] = a;
for (i = 1; i < 5; i++) {
arr[i] = arr[i - 1] + a;
}
arr[5] = arr[4] + b;
arr[6] = arr[5] + b;
long sum = arr[6];
long times = n / sum;
long time = n % sum;
for (i = 0; i < arr.length; i++) {
if (time <= arr[i]) {
break;
}
}
System.out.print(times * 7 + i + 1);
}
}
今天的题目都不算太难,如果有什么疑问,欢迎各位私信+评论,谢谢各位点赞和收藏。