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

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

📋今日题型:【枚举】📋

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

🤗国一镇楼🤗

📋比赛题目与分数比例📋

确认范围:

结果填空题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();
	}
}

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();
	}
}

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();
	}

}

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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

红目香薰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值