在计算机存储中,12.5MB是多少字节?
12.5 x 2^20 = 12.5 * 1024 * 1024
第十一届蓝桥杯省赛 c++ B组 填空题
int res = 0;
for(int i = 1 ; i <= 2020; i++){
int k = i;
while(k > 0){
int g = k % 10;
if(k == 2){
res++;
}
k /= 10;
}
}
System.out.println(res);
static int gcd(int a,int b){
return b !=0 ? gcd(b,a%b) : a;
}
public static void main(String[] args){
int res = 0;
for(int i = 1 ; i <= 2020; i++){
for(int j = 1; j <= 2020; j++){
if(gcd(i,j) == 1){
res++;
}
}
}
System.out.println(res);
}
public class Main{
/*
法一:第n行第n列的数 = 1 + (4 x1 + 4x2 +4x3 +……+4*n)
法二:题中要我们求的是第20行第20列的数字,那么我们看看从第一行第一列到第二十行第二十列有什么规律,图一第1行第1列的数在图二中是1行1列,
图一的2行2列的数在图二中是3行中间的数,图一3行3列在图二是5行 中间的数,
那么我们可以很轻松的找到一个规律,就是图一的n行n列在图二就是2n-1行中间的数。这样子推算下去,就可以得知第20行20列在图二中是39行中间的数。
因为2n-1永远都是奇数,所以我们可以看一下奇数行都有什么规律,第一行,第三行,第五行的数字都是按照升序的顺序排列的,而且每一行增加的数都是递增1,
那么不难看出,奇数行的最后一个数=奇数那一行的行数从1加到它本身,比如第三行最后一个数是1+2+3=6。
*/
public static void main(String[] args)
{
// int num = 20;
// int sum = 1;//因为规律 1 + (4 x1 + 4x2 +4x3 +……+4*n)前有个1,所以要从 1 加起
// for(int i = 0;i < num;i++)
// {
// sum += i * 4 ;
// }
// System.out.println(sum);
int a = 20,num=0;
a = a * 2 - 1;
for (int i = 0; i <= a; i++)
{
num += i;
}
int c = num - (a / 2);
System.out.println(c);
}
}
import java.time.*;
public class Main {
public static void main(String[] args) {
LocalDate startDate = LocalDate.of(2000, 1, 1);
LocalDate endDate = LocalDate.of(2020, 10, 1);
int totalDistance = calculateTotalDistance(startDate, endDate);
System.out.println(totalDistance);
}
public static int calculateTotalDistance(LocalDate startDate, LocalDate endDate) {
int totalDistance = 0;
LocalDate currentDate = startDate;
while (!currentDate.isAfter(endDate)) {
if (currentDate.getDayOfWeek().getValue() == 1 || currentDate.getDayOfMonth() == 1) {
totalDistance += 2;
} else {
totalDistance += 1;
}
currentDate = currentDate.plusDays(1);
}
return totalDistance;
}
}
原文链接: https://blog.csdn.net/weixin_44786382/article/details/114955357
第十一届蓝桥杯省赛 c++ C组 填空题
import java.util.*;
public class Main{
static int calc(int x)
{
int res = 1;
for (int i = 2; i <= x / i; i ++ )
if (x % i == 0)
{
int s = 0;
while (x % i == 0){
x /= i; s ++ ;
}
res *= (s + 1);
}
//还存在一个大于根号x的因子 res*(1 + 1)
if (x > 1) res *= 2;
return res;
}
public static void main(String[] args){
System.out.println(calc(78120));
}
}
题解链接: https://blog.csdn.net/qq_45985728/article/details/119357469
第十一届蓝桥杯省赛 java B组 填空题
/*
首先确定一下给定矩阵的大小,可以通过复制粘贴到记事本得到也可以通过编写简单的程序来得出
直接复制到记事本最好
*/
import java.util.*;
public class Main {
public static int counting(String[] str, int count) {//对数组进行判断
for (int i = 0; i < str.length; i++) {
for (int j = 0; j < str[i].length(); j++) {
if (str[i].charAt(j) == '2') {//2020一定是以 2 开头
/*
同一行
若找到字符 2 则进行后续判断,若该位置是在本行的倒数第四个之前 (若超过倒数第四个则无法满足 2020 四个字符同行的要求)
并且该位置的下一个位置是 0,再下一个位置是 2 ,再下一个位置是 0 的话,满足题目要求
*/
if (str[i].length() - j >= 4 && str[i].charAt(j + 1) == '0' && str[i].charAt(j + 2) == '2' && str[i].charAt(j + 3) == '0') {
count++;
}
/*
同一列
若找到字符 2 则进行后续判断,若该位置是在本列的倒数第四个之前 (若超过倒数第四个则无法满足 2020 四个字符同列的要求)
并且该位置的下一个位置是 0,再下一个位置是 2 ,再下一个位置是 0 的话,满足题目要求
*/
if (str.length - i >= 4 && str[i + 1].charAt(j) == '0' && str[i + 2].charAt(j) == '2' && str[i + 3].charAt(j) == '0') {
count++;
}
/*
斜线
若找到字符 2 则进行后续判断,若该位置是在本行和本列的倒数第四个之前 (若超过倒数第四个则无法满足 2020 四个字符同斜线的要求)
并且该位置的下一个位置是 0,再下一个位置是 2 ,再下一个位置是 0 的话,满足题目要求
*/
if (str[i].length() - j >= 4 && str.length - i >= 4 && str[i + 1].charAt(j + 1) == '0' && str[i + 2].charAt(j + 2) == '2' && str[i + 3].charAt(j + 3) == '0') {
count++;
}
}
}
}
return count;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int count = 0;
String[] arr = new String[300];
for (int i = 0; i < 300; i++) {//数据初始化
arr[i] = sc.nextLine();
}
count = counting(arr, count);
System.out.println(count);
sc.close();
}
}
路分析:
整体思路就是不断缩小答案的范围。
1、先看题目给的条件:包含小写英文字母,没有字母重复出现,那就是在a~z里面找。
2、冒泡排序的排序交换次数有个公式:count=(n*(n-1)) / 2
题目要求交换100次,n一个个代入公式试试看,发现n=15时,count=105次,
说明最多有15个小写英文字母。
3、然后题目要求字典序最小(字典序最小就是指 a,b,c,d的顺序最小)
那就是abcdefghijklmno这15个字母。
如果倒着写:onmlkjihgfedcba 它们交换成正序最多要105次。
4、那题目要求100次,那咋办呢?
手动先给它换5次,105次就变成100次了。要注意字典序最小
在字典序中,比较字符串时是从左到右逐个比较字符的 Unicode 值。
让某个字母少换5次,也就是把j换到最前面,答案就是:jonmlkihgfedcba.
原文链接: https://blog.csdn.net/m0_55148406/article/details/122687297
public class Main {
public static void main(String[] args) {
char[] s = {'j', 'o', 'n', 'm', 'l', 'k', 'i', 'h', 'g', 'f', 'e', 'd', 'c', 'b', 'a'};
int cnt = 0;
for (int i = 0; i < s.length - 1; i++) {
for (int j = 0; j < s.length - 1 - i; j++) {
if (s[j] > s[j + 1]) {
char temp = s[j];
s[j] = s[j + 1];
s[j + 1] = temp;
cnt++;
}
}
}
System.out.println("交换次数:" + cnt);
System.out.println("排序后的字符串:" + new String(s));
}
}