文章目录
解法:暴力枚举
package fiveSession;
/*** 2014第五届 1、猜年龄 ***/
public class test1 {
public static void main(String[] args) {
int age1 = 0, age2 = 0;
boolean find = false;
for (int i = 1; i < 50; i++) {
for (int j = i + 1; j < i + 9; j++) {
if (i * j == 6 * (i + j)) {
age1 = i;
age2 = j;
find = true;
break;
}
}
if (find) break;
}
System.out.println(age1);
}
}
答案:
10
解法:递归
package fiveSession;
/*** 2014第五届 2、李白打酒 ***/
public class test2 {
public static void main(String[] args) {
int wine = 2;
int shop = 5, flower = 10;
int res = f(wine, shop, flower);
System.out.println(res);
}
private static int f(int wine, int shop, int flower) {
if (shop < 0 || flower < 0) return 0;
if (wine == 0 && (shop != 0 || flower != 0)) return 0;
if (wine == 0 && shop == 0 && flower == 0) return 1;
int res = f(wine * 2, shop - 1, flower);
res += f(wine - 1, shop, flower - 1);
return res;
}
}
递归二
package fiveSession;
/*** 2014第五届 2、李白打酒 ***/
public class test2 {
static int res = 0;
public static void main(String[] args) {
int wine = 2;
int shop = 5, flower = 10 - 1;
f(wine, shop, flower);
System.out.println(res);
}
private static void f(int wine, int shop, int flower) {
if (wine == 1 && shop == 0 && flower == 0) {
res++;
return;
}
if (shop > 0) f(wine * 2, shop - 1, flower);
if (flower > 0) f(wine - 1, shop, flower - 1);
}
}
答案:
14
解法:暴力枚举
package fiveSession;
import java.util.Arrays;
/*** 2014第五届 3、神奇算式 ***/
public class test3 {
public static void main(String[] args) {
int res = 0;
for (int i = 1; i < 10; i++) {
for (int j = 0; j < 10; j++) {
if (i == j) continue;
for (int k = 0; k < 10; k++) {
if (i == k || j == k) continue;
for (int p = 0; p < 10; p++) {
if (i == p || j == p || k == p) continue;
int src = i * 1000 + j * 100 + k * 10 + p;
if (j != 0) {
res += check(src, i * (j * 100 + k * 10 + p));
}
if (k != 0 && (i * 10 + j) < (k * 10 + p)) {
res += check(src, (i * 10 + j) * (k * 10 + p));
}
}
}
}
}
System.out.println(res);
}
public static int check(int src, int r2) {
String s1 = String.valueOf(src);
String s2 = String.valueOf(r2);
char[] cs1 = s1.toCharArray();
char[] cs2 = s2.toCharArray();
Arrays.sort(cs1);
Arrays.sort(cs2);
if (new String(cs1).equals(new String(cs2))) return 1;
return 0;
}
}
答案:
12
解法:找规律
package fiveSession;
/*** 2014第五届 4、写日志 ***/
public class test4 {
private static int n = 1;
public static void write(String msg) {
String filename = "t" + n + ".log";
n = (n % 3) + 1;
System.out.println(filename + "," + msg);
}
public static void main(String[] args) {
for (int i = 0; i < 15; i++) write("a");
}
}
答案:
(n % 3) + 1
package fiveSession;
/*** 2014第五届 5、锦标赛 ***/
public class test5 {
static void f(int[] a) {
int n = 1;
while (n < a.length) n *= 2;
int[] b = new int[2 * n - 1];
for (int i = 0; i < n; i++) {
if (i < a.length)
b[n - 1 + i] = i;
else
b[n - 1 + i] = -1;
}
//从最后一个向前处理
for (int i = b.length - 1; i > 0; i -= 2) {
if (b[i] < 0) {
if (b[i - 1] >= 0)
b[(i - 1) / 2] = b[i - 1];
else
b[(i - 1) / 2] = -1;
} else {
if (a[b[i]] > a[b[i - 1]])
b[(i - 1) / 2] = b[i];
else
b[(i - 1) / 2] = b[i - 1];
}
}
//输出树根
System.out.println(b[0] + ":" + a[b[0]]);
//值等于根元素的需要重新pk
pk(a, b, 0, b[0]);
//再次输出树根
System.out.println(b[0] + ":" + a[b[0]]);
}
static void pk(int[] a, int[] b, int k, int v) {
//if(k>b.length) return;
int k1 = k * 2 + 1;
int k2 = k1 + 1;
if (k1 >= b.length || k2 >= b.length) {
// 此处将 叶子结点为最大值的 下标b[k]抹去,置为-1
b[k] = -1; //(要是我我会该行代码设为考点~(@^_^@)~)
return;
}
if (b[k1] == v)
pk(a, b, k1, v);
else
pk(a, b, k2, v);
//重新比较
if (b[k1] < 0) {
if (b[k2] >= 0)
b[k] = b[k2];
else
b[k] = -1;
return;
}
if (b[k2] < 0) {
if (b[k1] >= 0)
b[k] = b[k1];
else
b[k] = -1;
return;
}
if (a[b[k1]]>a[b[k2]])
b[k] = b[k1];
else
b[k] = b[k2];
}
public static void main(String[] args) {
int[] a = {54, 55, 18, 16, 122, 255, 30, 9, 58, 66};
f(a);
}
}
答案:
a[b[k1]]>a[b[k2]]
解法:全排列+剪枝
package fiveSession;
/*** 2014第五届 6、六角填数 ***/
public class test6 {
static int[] a = {2, 4, 5, 6, 7, 9, 10, 11, 12};
public static void main(String[] args) {
backtrack(0, a.length);
}
private static void backtrack(int begin, int end) {
if (begin == 6 && 8 + a[0] + a[1] + a[2] != 1 + a[0] + a[3] + a[5]) return;
if (begin == 7 && 8 + a[0] + a[1] + a[2] != 8 + a[3] + a[6] + 3) return;
if (begin == end) {
if (8 + a[0] + a[1] + a[2] != a[5] + a[6] + a[7] + a[8]) return;
if (8 + a[0] + a[1] + a[2] != a[2] + a[4] + a[7] + 3) return;
if (8 + a[0] + a[1] + a[2] != 1 + a[1] + a[4] + a[8]) return;
System.out.println(a[3]);
}
for (int i = begin; i < end; i++) {
int t = a[begin]; a[begin] = a[i]; a[i] = t;
backtrack(begin + 1, end);
t = a[begin]; a[begin] = a[i]; a[i] = t;
}
}
}
答案:
10
解法:动态规划
绳圈组合数:自成一圈+加入前一组合(2个头+i -1个分割点)
令C[i]表示i个绳的组合数,则有
C
[
i
]
=
c
[
i
−
1
]
+
C
[
i
−
1
]
∗
(
i
−
1
)
∗
2
=
C
[
i
−
1
]
∗
(
2
i
−
1
)
C[i] = c[i -1] + C[i - 1] *(i - 1) * 2 = C[i-1]*(2i-1)
C[i]=c[i−1]+C[i−1]∗(i−1)∗2=C[i−1]∗(2i−1)
令F[i][j]表示i个绳组j个圈的概率,则有
F
[
i
]
[
j
]
=
F
[
i
−
1
]
[
j
−
1
]
∗
C
[
i
−
1
]
+
F
[
i
−
1
]
[
j
]
∗
C
[
i
−
1
]
∗
(
i
−
1
)
∗
2
C
[
i
]
F[i][j]=\frac{F[i-1][j-1]*C[i-1]+F[i-1][j]*C[i-1]*(i-1)*2}{C[i]}
F[i][j]=C[i]F[i−1][j−1]∗C[i−1]+F[i−1][j]∗C[i−1]∗(i−1)∗2
联立两式约分有
F
[
i
]
[
j
]
=
F
[
i
−
1
]
[
j
−
1
]
+
F
[
i
−
1
]
[
j
]
∗
(
i
−
1
)
∗
2
2
i
−
1
F[i][j]=\frac{F[i-1][j-1]+F[i-1][j]*(i-1)*2}{2i-1}
F[i][j]=2i−1F[i−1][j−1]+F[i−1][j]∗(i−1)∗2
package fiveSession;
/*** 2014第五届 7、绳圈 ***/
public class test7 {
public static void main(String[] args) {
double[][] f = new double[101][101];
f[1][1] = 1;
for (int rope = 2; rope <= 100; rope++) {
f[rope][1] = f[rope - 1][1] * (rope - 1) * 2 / (2 * rope - 1);
for (int circle = 2; circle <= rope; circle++) {
f[rope][circle] = (f[rope - 1][circle - 1] + f[rope - 1][circle] * (rope - 1) * 2) / (2 * rope - 1);
}
}
int ans = 0;
double maxVal = 0.0;
for (int circle = 1; circle <= 100; circle++) {
if (f[100][circle] > maxVal) {
maxVal = f[100][circle];
ans = circle;
}
}
System.out.println(ans);
}
}
答案:
3
解法:方向模拟
package fiveSession;
import java.util.Scanner;
/*** 2014第五届 8、兰顿蚂蚁 ***/
public class test8 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int m = sc.nextInt();
int n = sc.nextInt();
int[][] g = new int[m][n];
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
g[i][j] = sc.nextInt();
}
}
int x = sc.nextInt();
int y = sc.nextInt();
String s = sc.next();
int d = getD(s);
int k = sc.nextInt();
// 方向: 上右下左
int[][] dirs = {{-1, 0}, {0, 1}, {1, 0}, {0, -1}};
for (int i = 1; i <= k; i++) {
if (g[x][y] == 0) {
d = (d + 3) % 4;
g[x][y] = 1;
} else {
d = (d + 1) % 4;
g[x][y] = 0;
}
x = x + dirs[d][0];
y = y + dirs[d][1];
}
System.out.println(x + " " + y);
}
private static int getD(String s) {
if (s.equals("U")) return 0;
if (s.equals("R")) return 1;
if (s.equals("D")) return 2;
return 3;
}
}
解法一:暴力法(4/7)
package fiveSession;
import java.util.Scanner;
/*** 2014第五届 9、斐波那契,暴力法1 ***/
public class test9 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
long n = sc.nextLong();
long m = sc.nextLong();
long p = sc.nextLong();
long sum = 1;
long t = 0, f1 = 0, f2 = 1, mMod = 0;
for (long i = 2; i <= n; i++) {
t = f2 + f1;
f1 = f2;
f2 = t;
sum += t;
if (i == m) mMod = t;
}
if (m > n) {
for (long i = n + 1; i <= m; i++) {
t = f2 + f1;
f1 = f2;
f2 = t;
}
mMod = f2;
}
System.out.println(sum % mMod % p);
}
}
解法二:公式定理+矩阵运算
我这个水平,能暴力就暴力,现在记公式定理性价比不高,推理构造的到时可以深究一下。
有兴趣的可以看一下参考:从蓝桥杯来谈Fibonacci数列
解法一:枚举首项+dfs(2/8)
x x+a x+2a x+3a ··· x+(n-1)a s = nx + n(n-1)a/2
x x-b x-2b x-3b ··· x-(n-1)b s = nx - n(n-1)b/2
通过上式可以求出首项x的范围
package fiveSession;
import java.util.Scanner;
/*** 2014第五届 10、波动数列 ***/
public class test10 {
static int n, s, a, b;
static long ans;
static final int MOD = (int)1e8 + 7;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
s = sc.nextInt();
a = sc.nextInt();
b = sc.nextInt();
sc.close();
// x x+a x+2a x+3a ··· x+(n-1)a s = nx + n(n-1)a/2
//x x-b x-2b x-3b ··· x-(n-1)b s = nx - n(n-1)b/2
int minX = (s - (n - 1) * n * a / 2) / n;
int maxX = (s + (n - 1) * n * b / 2) / n;
for (int x = minX; x <= maxX; x++) {
dfs(x, 1, x);
}
System.out.println(ans);
}
private static void dfs(int x, int cnt, int sum) {
if (cnt == n) {
if (sum == s) {
ans++;
if (ans > MOD) ans %= MOD;
}
return;
}
dfs(x + a, cnt + 1, sum + x + a);
dfs(x - b, cnt + 1, sum + x - b);
}
}
优化:枚举a,b的数目+dfs(2/8)
package fiveSession;
import java.util.Scanner;
/*** 2014第五届 10、波动数列, 优化枚举 ***/
public class test10_2 {
static int n, s, a, b;
static long ans;
static final int MOD = (int)1e8 + 7;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
s = sc.nextInt();
a = sc.nextInt();
b = sc.nextInt();
sc.close();
// x x+p x+2p x+3p ··· x+(n-1)p s = nx + n(n-1)p/2
// t = n(n-1)/2
// 若a的数目为ta, 则b数目为tb
int t = n * (n - 1) / 2;
long minX = (s - a * t) / n;
long maxX = (s + b * t) / n;
for (long x = minX; x <= maxX; x++) {
for (long ta = 0; ta <= t; ta++) {
// 减少对x的枚举
long curSum = x * n + ta * a - (t - ta) * b;
if (curSum == s) dfs(x, 1, x);
}
}
System.out.println(ans);
}
private static void dfs(long x, int cnt, long sum) {
if (cnt == n) {
if (sum == s) {
ans++;
if (ans > MOD) ans %= MOD;
}
return;
}
dfs(x + a, cnt + 1, sum + x + a);
dfs(x - b, cnt + 1, sum + x - b);
}
}
解法二:动态规划,求a和b的组合数(7/10)
package fiveSession;
import java.util.Scanner;
/*** 2014第五届 10、波动数列, 动态规划 ***/
public class test10_3{
static int n, s, a, b;
static long ans;
static final int MOD = (int)1e8 + 7;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
s = sc.nextInt();
a = sc.nextInt();
b = sc.nextInt();
sc.close();
dpMethod();
System.out.println(ans);
}
private static void dpMethod() {
int t = n * (n - 1) / 2;
// dp[i][j]表示用前i个数组成值j的组合数方法
int[][] dp = new int[n][t + 1];
dp[0][0] = 1;
for (int i = 0; i < n; i++) dp[i][0] = 1;
for (int i = 1; i < n; i++) {
for (int j = 1; j <= t; j++) {
if (i > j) {
dp[i][j] = dp[i - 1][j];
} else {
dp[i][j] = dp[i - 1][j] + dp[i - 1][j - i];
}
dp[i][j] %= MOD;
}
}
for (int ta = 0; ta <= t; ta++) {
if ((s - ta * a + (t - ta) * b) % n == 0) {
ans = (ans + dp[n - 1][ta]) % MOD;
}
}
}
}
优化:动态规划+滚动数组将状态压缩为二维(7/10)
package fiveSession;
import java.util.Scanner;
/*** 2014第五届 10、波动数列, 动态规划 ***/
public class test10_3{
static int n, s, a, b;
static long ans;
static final int MOD = (int)1e8 + 7;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
s = sc.nextInt();
a = sc.nextInt();
b = sc.nextInt();
sc.close();
dpMethod2();
System.out.println(ans);
}
private static void dpMethod2() {
int t = n * (n - 1) / 2;
// dp[i][j]表示用前i个数组成值j的组合数方法
int[][] dp = new int[2][t + 1];
dp[0][0] = dp[1][0] = 1;
int row = 0;
for (int i = 1; i < n; i++) {
row = 1 - row;
for (int j = 1; j <= t; j++) {
if (i > j) {
dp[row][j] = dp[1 - row][j];
} else {
dp[row][j] = dp[1 - row][j] + dp[1 - row][j - i];
}
dp[row][j] %= MOD;
}
}
for (long ta = 0; ta <= t; ta++) {
if ((s - ta * a + (t - ta) * b) % n == 0) {
ans = (ans + dp[row][(int)ta]) % MOD;
}
}
}
}
优化:动态规划+状态压缩为一维(10/10)
package fiveSession;
import java.util.Scanner;
/*** 2014第五届 10、波动数列, 动态规划 ***/
public class test10_3{
static int n, s, a, b;
static long ans;
static final int MOD = (int)1e8 + 7;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
s = sc.nextInt();
a = sc.nextInt();
b = sc.nextInt();
sc.close();
dpMethod3();
System.out.println(ans);
}
private static void dpMethod3() {
int t = n * (n - 1) / 2;
// dp[i][j]表示用前i个数组成值j的组合数方法
int[] dp = new int[t + 1];
dp[0] = 1;
for (int i = 1; i < n; i++) {
// 减少j的枚举
for (int j = i * (i + 1) / 2; j >= i; j--) {
dp[j] = (dp[j] + dp[j - i]) % MOD;
}
}
for (long ta = 0; ta <= t; ta++) {
if ((s - ta * a + (t - ta) * b) % n == 0) {
ans = (ans + dp[(int)ta]) % MOD;
}
}
}
}
这道题目的两种方法的一步步优化真的惊艳到我了!佩服佩服!
总的来说排列组合和动态规划涉及的很多,动态规划永远的伤啊~

Ⅰ软件测试基础一、软件测试基础理论1、软件测试的必要性所有的产品或者服务上线都需要测试2、测试的发展过程3、什么是软件测试找bug,发现缺陷4、测试的定义使用人工或自动的手段来运行或者测试某个系统的过程。目的在于检测它是否满足规定的需求。弄清预期结果和实际结果的差别。5、测试的目的以最小的人力、物力和时间找出软件中潜在的错误和缺陷6、测试的原则28原则:20%的主要功能要重点测(eg:支付宝的支付功能,其他功能都是次要的)80%的错误存在于20%的代码中7、测试标准8、测试的基本要求功能测试性能测试安全性测试兼容性测试易用性测试外观界面测试可靠性测试二、质量模型衡量一个优秀软件的维度①功能性功
网站的日志分析,是seo优化不可忽视的一门功课,但网站越大,每天产生的日志就越大,大站一天都可以产生几个G的网站日志,如果光靠肉眼去分析,那可能看到猴年马月都看不完,因此借助网站日志分析工具去分析网站日志,那将会使网站日志分析工作变得更简单。下面推荐两款网站日志分析软件。第一款:逆火网站日志分析器逆火网站日志分析器是一款功能全面的网站服务器日志分析软件。通过分析网站的日志文件,不仅能够精准的知道网站的访问量、网站的访问来源,网站的广告点击,访客的地区统计,搜索引擎关键字查询等,还能够一次性分析多个网站的日志文件,让你轻松管理网站。逆火网站日志分析器下载地址:https://pan.baidu.
目录前言: 一、ASC分析代码实现二、 卡片分析代码实现三、 直线分析代码实现四、货物摆放分析代码实现小结:前言: 在刷题的过程中,发现蓝桥杯的题目和力扣的差别很大。让人有一种不一样的感觉,蓝桥杯题目偏向对于实际问题用编程去的解决,而力扣给人感觉很锻炼自己的编程思维,逻辑能力。两者结合去刷,相信会有不一样的收获。 一、ASC 已知大写字母A的ASCII码为65,请问大写字母L的ASCII码是多少?分析 这道题目看上去很简单,我们需确定自己计算的准确,所以我建议用编程去解决。代码实现publicclassTest8{publicstaticvoidmain(String[]args){Sy
谈到现状,国内的软件测试行情目前呈现了两极分化的极端情况。一个是早期的手工测试人员吐槽工作不好做,即使有工作也是外包,而且薪资太低;一方面是很多互联网企业感叹自动化测试人才难找,有技术的自动化测试工程师,高薪难聘。这两者其实并不矛盾。手工测试工作难找也确实是目前真实的行情早期从事功能测试的手工测试人员,在测试方面大多采用手动、人工执行的方式查找软件缺陷和BUG,用行业术语来描述就是“点点点”。这种测试方式耗费大量人力和资源,工作效率却十分低下。在早期软件复杂和迭代程度不高的情况下,有资本的企业会“供养”一批这样的手工测试人员。但对测试员本身来讲,毫无技术难度的工作,和几乎没有保障的薪资水平,直
?作者主页:静Yu?简介:CSDN全栈优质创作者、华为云享专家、阿里云社区博客专家,前端知识交流社区创建者?社区地址:前端知识交流社区?博主的个人博客:静Yu的个人博客?博主的个人笔记本:前端面试题个人笔记本只记录前端领域的面试题目,项目总结,面试技巧等等。接下来会更新蓝桥杯官方系统基础练习的VIP试题,依然包括解题思路,源代码等等。问题描述:给定当前的时间,请用英文的读法将它读出来。时间用时h和分m表示,在英文的读法中,读一个时间的方法是: 如果m为0,则将时读出来,然后加上“o’clock”,如3:00读作“threeo’clock”。 如果m不为0,则将时读出来,然后将分读出来,如5
其实现在基础的资料和视频到处都是,就是看你有没有认真的去找学习资源了,去哪里学习都是要看你个人靠谱不靠谱,再好的教程和老师,你自己学习不进去也是白搭在正式选择之前,大可以在各种学习网站里面找找学习资源先自己学习一下为什么选择学软件测试?同学们理由众多!大概分这几类:①不受开发语言、行业产品变化限制;②入门更简单,对零基础、女生都友好;③软件项目都需要测试人员,职业生涯稳;④学习周期短,但薪资并不低。要想“肩扛”一条线?需掌握三大技能:技能1:掌握测试流程,熟悉系统框架能提前与开发人员一起制定测试计划,通过测试左移,推动代码评审,代码审计,单元测试,自动化冒烟测试,来保证研发阶段的质量。技能2:
2022年伊始,默安科技联合数世咨询举办以“软件供应链安全的时与势”为主题的访谈活动,由数世咨询创始人李少鹏主持,邀请贝壳安全研发负责人李文鹏、北京邮电大学副教授张文博、默安科技副总裁沈锡镛三位行业大咖做客网安小酒馆,从产业、企业、学术的不同维度,共同探讨软件供应链安全建设的新思路,为业界呈现了一场开年网安盛宴。随着全球软件供应链安全事件频发,软件供应链安全逐渐成为业界关注焦点,也成为影响国家重要信息系统安全与关键信息基础设施安全的重要因素,以及网络安全保障体系和能力建设的重要环节。嘉宾们围绕软件供应链安全发展的主要驱动力、关基行业中的实施现状和落地难点、产学研成果转化、软件供应链安全的重要性
我在irb中尝试计算3**557时遇到了这个问题。Ruby和MacRuby都安装在我的Mac(OSX10.8)中。而ruby的版本是1.8.7,MacRuby0.12(ruby1.9.2)。rib和macirb在计算3**557时给了我两个不同的答案。(macirb是对的。)$irb>>3**557=>547557021793427620635514407889455410079268087653269511938101071654296104237032917607402447243260999931319131042725875729185204428725368897246765
十四届蓝桥青少组模拟赛Python-20221108T1.二进制位数十进制整数2在十进制中是1位数,在二进制中对应10,是2位数。十进制整数22在十进制中是2位数,在二进制中对应10110,是5位数。请问十进制整数2022在二进制中是几位数?print(len(bin(2022))-2)#运行结果:11T2.晨跑小蓝每周六、周日都晨跑,每月的1、11、21、31日也晨跑。其它时间不晨跑。已知2022年1月1日是周六,请问小蓝整个2022年晨跑多少天?#样例代码1ls=[0,31,28,31,30,31,30,31,31,30,31,30,31]ans=0k=6foriinrange(1,13)
本文代码使用HAL库。文章目录前言一、MCP4017的重要特性二、MCP4017计算RBW阻值三、MCP4017地址四、MCP4017读写函数五、CubeMX创建工程(利用ADC测量MCP4017电压)、对应代码:总结前言一、MCP4017的重要特性蓝桥杯板子上的是MCP4017T-104ELT,如图1。MCP4017是一个可编程电阻,通过写入的数值可以改变电阻的大小。重点在于6引脚(W),5引脚(B