????????距离【第十三届蓝桥杯4月9日省赛】仅剩【12天】????????

【蓝桥杯省赛】冲刺练习题【枚举】倒计时【12】天_i++

????今日题型:【枚举】????

⭐️????循环是一切暴力的基础,暴力基础,转起来。????⭐️

????国一镇楼????

【蓝桥杯省赛】冲刺练习题【枚举】倒计时【12】天_回文数_02

????比赛题目与分数比例????

【蓝桥杯省赛】冲刺练习题【枚举】倒计时【12】天_蓝桥杯_03


确认范围:

结果填空题5道,共计45分。

程序设计题5道,共计105分。


⭐️????刷题安排????⭐️

日期

题目类型

题目数量

3月25日

循环

6

3月26日

超大数

6

3月27日

数组

6

3月28日

枚举

6

3月29日

递归

6

3月30日

绘图

6

3月31日

深搜广搜

5

4月1日

动态规划

5

4月2日

填空题

5

4月3日

数学公式:查询准考证

5

4月4日

第十届省赛题

10

4月5日

第十一届省赛题

10

4月6日

第十二届省赛1套题

10

4月7日

第十二届省赛2套题

10

4月8日

经典题目练习

8

4月9日

9点考试


目录

1、鸡兔同笼

2、韩信点兵

3、回文数字 (Java代码)暴力枚举

4、筛选号码

5、完美立方

6、生理周期

附加题:蓝桥杯2021年第十二届省赛真题-最少砝码


1、鸡兔同笼

问题:有鸡兔共50头,共有脚120只。 问 :鸡兔分别的数量?

//最新新跟学生学的输出缓冲区方法,输出速度提高了好多。
PrintWriter pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out),65536));

题解:

package test;

import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;

public class demo {
public static void main(String[] args) {
PrintWriter pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out), 65536));
for (int i = 0; i <= 50; i++) {// 设鸡有i只
int j = 50 - i;// 设兔有j只
if (2 * i + 4 * j == 120) {// 鸡有2条腿,兔有4条腿
pw.println("i=" + i + " " + "j=" + j);
}
}
pw.close();
}
}

【蓝桥杯省赛】冲刺练习题【枚举】倒计时【12】天_蓝桥杯_04

2、韩信点兵

问题:韩信知道部队人数大约1000人左右,具体数字不详,5人一组剩余1人,7个人一组还剩两个人,8个人一组还剩3个人,问:这支部队有多少人?

package test;

import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;

public class demo {
public static void main(String[] args) {
PrintWriter pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out), 65536));
for(int i=0;i<2000;i++) {
if(i%5==1 && i%7==2 && i%8==3) {
pw.println("i="+i);
}
}
pw.close();
}
}

【蓝桥杯省赛】冲刺练习题【枚举】倒计时【12】天_蓝桥杯_05

3、回文数字 (Java代码)暴力枚举

时间限制: 1Sec 内存限制: 128MB 提交: 17468 解决: 7210

题目描述

观察数字:12321,123321  都有一个共同的特征,无论从左到右读还是从右向左读,都是相同的。这样的数字叫做:回文数字。


本题要求你找到一些5位或6位的十进制数字。满足如下要求:

该数字的各个数位之和等于输入的整数。

输入

一个正整数  n  (10< n< 100),  表示要求满足的数位和。

输出

若干行,每行包含一个满足要求的5位或6位整数。 

数字按从小到大的顺序排列。 

如果没有满足条件的,输出:-1 

样例输入复制

44

样例输出复制

99899
499994
589985
598895
679976
688886
697796
769967
778877
787787
796697
859958
868868
877778
886688
895598
949949
958859
967769
976679
985589
994499

题解: 

package test;

import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.util.Scanner;

public class demo {

public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
PrintWriter pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out), 65536));
int n = sc.nextInt();
sc.close();
int a, b, c, d, e, f;
int flag = 0;
for (int i = 10000; i <= 999999; i++) {
int s = 0;
if (i <= 99999) {
int b1 = i / 10000;
int c1 = i / 1000 % 10;
int d1 = i / 100 % 10;
int e1 = i / 10 % 10;
int f1 = i % 10;
if (b1 == f1 && c1 == e1) {
s += b1 + c1 + d1 + e1 + f1;
}
} else {
a = i / 100000;
b = i / 10000 % 10;
c = i / 1000 % 10;
d = i / 100 % 10;
e = i / 10 % 10;
f = i % 10;
if (a == f && b == e && c == d) {
s += a + b + c + d + e + f;
}
}
if (s == n) {
pw.println(i);
flag = 1;
}
}
if (flag == 0) {
pw.println("-1");
}
pw.close();
}

}

4、筛选号码

有n个人围成一圈,顺序排号(编号为1到n)。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子。从下一个人开始继续报数,直到剩下最后一个人,游戏结束。

问最后留下的是原来第几号的那位。

举个例子,8个人围成一圈:

1 2 3 4 5 6 7 8

第1次报数之后,3退出,剩下:

1 2 4 5 6 7 8 (现在从4开始报数)

第2次报数之后,6退出,剩下:

1 2 4 5 7 8 (现在从7开始报数)

第3次报数之后,1退出,剩下:

2 4 5 7 8 (现在从2开始报数)

第4次报数之后,5退出,剩下:

2 4 7 8 (现在从7开始报数)

第5次报数之后,2退出,剩下:

4 7 8 (现在从4开始报数)

第6次报数之后,8退出,剩下:

4 7 (现在从4开始报数)

最后一次报数之后,4退出,剩下:

7.

所以,最后留下来的人编号是7。

Input

输入描述:

一个正整数n,(1<n<10000)

输入样例:

8

Output

输出描述:

一个正整数,最后留下来的那个人的编号。

输出样例:

7

题解:

package test;

import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.util.Scanner;

public class demo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
PrintWriter pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out), 65536));
int n = sc.nextInt();
sc.close();
int nums[] = new int[n + 1];
int t = 0;
int index = 0;
while (true) {
for (int i = 1; i <= n; i++) {
if (nums[i] != 1) {
t++;
}

if (t % 3 == 0) {
nums[i] = 1;
}
}

int sum = 0;
for (int i = 1; i <= n; i++) {
if (nums[i] == 0) {
sum += 1;
index = i;
}
}

if (sum == 1) {
break;
}
}
pw.println(index);
pw.close();
}

}

5、完美立方

形如a3= b3 + c3 + d3的等式被称为完美立方等式。例如123= 63 + 83 + 103 。编写一个程序,对任给的正整数N (N≤100),寻找所有的四元组(a, b, c, d),使得a3 = b3 + c3 + d3,其中a,b,c,d 大于 1, 小于等于N,且b<=c<=d。

输入:

一个正整数N (N≤100)。

输出:

每行输出一个完美立方。输出格式为:

Cube = a, Triple = (b,c,d)

其中a,b,c,d所在位置分别用实际求出四元组值代入。


请按照a的值,从小到大依次输出。当两个完美立方等式中a的值相同,则b值小的优先输出、仍相同则c值小的优先输出、再相同则d值小的先输出。

样例输入:

24

样例输出:

Cube = 6, Triple = (3,4,5)
Cube = 12, Triple = (6,8,10)
Cube = 18, Triple = (2,12,16)
Cube = 18, Triple = (9,12,15)
Cube = 19, Triple = (3,10,18)
Cube = 20, Triple = (7,14,17)
Cube = 24, Triple = (12,16,20)

最新新跟学生学的输出缓冲区方法,输出速度提高了好多。

PrintWriter pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out),65536));
package test;

import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.util.Scanner;

public class demo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
PrintWriter pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out),65536));
int N = sc.nextInt();
sc.close();
for (int a = 2; a <= N; a++) {
for (int b = 2; b < a; b++) {
for (int c = b; c < a; c++) {
for (int d = c; d < a; d++) {
if (a * a * a == b * b * b + c * c * c + d * d * d) {
pw.printf("Cube= %d, Triple(%d, %d, %d)\n", a, b, c, d);// 格式化输出
}
}
}
}
}
pw.close();
}
}

6、生理周期

总时间限制: 1000ms 内存限制: 65536kB

描述

人生来就有三个生理周期,分别为体力、感情和智力周期,它们的周期长度为23天、28天和33天。每一个周期中有一天是高峰。在高峰这天,人会在相应的方面表现出色。例如,智力周期的高峰,人会思维敏捷,精力容易高度集中。因为三个周期的周长不同,所以通常三个周期的高峰不会落在同一天。对于每个人,我们想知道何时三个高峰落在同一天。对于每个周期,我们会给出从当前年份的第一天开始,到出现高峰的天数(不一定是第一次高峰出现的时间)。你的任务是给定一个从当年第一天开始数的天数,输出从给定时间开始(不包括给定时间)下一次三个高峰落在同一天的时间(距给定时间的天数)。例如:给定时间为10,下次出现三个高峰同天的时间是12,则输出2(注意这里不是3)。

输入

一行,包含四个整数:p, e, i和d,相邻两个整数之间用单个空格隔开。 p, e, i分别表示体力、情感和智力高峰出现的时间(时间从当年的第一天开始计算)。d 是给定的时间,可能小于p, e, 或 i。 所有给定时间是非负的并且小于等于365, 所求的时间小于等于21252。

输出

一个整数,即从给定时间起,下一次三个高峰同天的时间(距离给定时间的天数)。

样例输入

4 5 6 7

样例输出

16994

编码: 

package test;

import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.util.Scanner;

public class demo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
PrintWriter pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out), 65536));
int p, e, i, d;
p = sc.nextInt();
e = sc.nextInt();
i = sc.nextInt();
d = sc.nextInt();
sc.close();
int day = d + 1;
for (; (day - p) % 23 != 0; day++);
for (; (day - e) % 28 != 0; day += 23);
for (; (day - i) % 33 != 0; day += 23 * 28);
int find = day - d;
pw.println(find);
pw.close();
}
}

附加题:蓝桥杯2021年第十二届省赛真题-最少砝码

题目描述

你有一架天平。现在你要设计一套砝码,使得利用这些砝码可以称出任意小于等于 N 的正整数重量。那么这套砝码最少需要包含多少个砝码?

注意砝码可以放在天平两边。

输入包含一个正整数 N。

输出一个整数代表答案。

样例输入

7

样例输出

3

提示

【样例说明】

3 个砝码重量是 1、4、6,可以称出 1 至 7 的所有重量。

1 = 1;

2 = 6 4 (天平一边放 6,另一边放 4);

3 = 4 1;

4 = 4;

5 = 6 1;

6 = 6;

7 = 1 + 6;

少于 3 个砝码不可能称出 1 至 7 的所有重量。

【评测用例规模与约定】

对于所有评测用例,1 ≤ N ≤ 1000000000。

题解:

package test;

import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.util.Scanner;

public class demo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
PrintWriter pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out), 65536));
int num = sc.nextInt();
sc.close();
int n=1;
int w=1;
int ans=1;
while((n+w)<num) {
n+=w;
w*=3;
ans++;
}
System.out.println(ans);
pw.close();
}

}

有一定的暴力难度,但是难度都是可以接收的哦。慢慢做,别急,都能做出来。