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

2022-11-29 21:12:10 浏览数 (1)

目录

1、鸡兔同笼

2、韩信点兵

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

4、筛选号码

5、完美立方

6、生理周期

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

1、鸡兔同笼

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

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

题解:

代码语言:javascript复制
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个人,问:这支部队有多少人?

代码语言:javascript复制
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 

样例输入复制

代码语言:javascript复制
44

样例输出复制

代码语言:javascript复制
99899
499994
589985
598895
679976
688886
697796
769967
778877
787787
796697
859958
868868
877778
886688
895598
949949
958859
967769
976679
985589
994499

题解: 

代码语言:javascript复制
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)

输入样例:

代码语言:javascript复制
8

Output

输出描述:

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

输出样例:

代码语言:javascript复制
7

题解:

代码语言:javascript复制
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值小的先输出。

样例输入:

代码语言:javascript复制
24

样例输出:

代码语言:javascript复制
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)

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

代码语言:javascript复制
PrintWriter pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out),65536));
代码语言:javascript复制
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。 输出 一个整数,即从给定时间起,下一次三个高峰同天的时间(距离给定时间的天数)。 样例输入

代码语言:javascript复制
4 5 6 7

样例输出

代码语言:javascript复制
16994

编码: 

代码语言:javascript复制
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。

题解:

代码语言:javascript复制
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();
	}

}

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

0 人点赞