欢迎大家阅读蓝桥杯文章专栏🍄🍄
🔥2023第十四届蓝桥杯模拟赛第二期个人题解(Java实现)
🔥2023第十四届蓝桥杯模拟赛第三期个人题解(Java实现)
🔥蓝桥杯备赛之动态规划篇——背包问题
🔥蓝桥杯备赛之动态规划篇——涂色问题(区间DP)
🔥蓝桥杯真题——单词分析(Java实现)
💎第十四届蓝桥杯Java B组真题

😘😘哈喽,大家好!今年的蓝桥杯终于落下帷幕啦!今天真的被整得怀疑人生了😭😭😭😭今年主打的就是陪伴😪赛后我重新做了这些题,写下这篇题解,跟大家交流交流!🍄
🙊🙊如果我写的内容有误,欢迎大家在评论区指正👏希望这篇文章对你有帮助❤❤同时欢迎关注我呦👇👇
雾霾愈让人窒息,我愈拼命争取一口清新;
黑暗愈遮盖大地,我们的心看得就愈清晰!

问题描述
令 S = 1! + 2! + 3! + … + 202320232023!,求 S 的末尾 9 位数字。
提示:答案首位不为 0。
答案提交
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
🍒🍒这道题肯定不能按题目的要求算到 202320232023!,肯定有规律可循,所以不妨先算前50项,取最后9位看看结果。阶乘算出来的结果很大,用Long也会爆,可以用BigIneger,需要注意的是BigInteger的加减乘除需要调API实现。
import java.math.BigInteger;
public class 试题A_阶乘求和 {
public static void main(String[] args) {
BigInteger n=new BigInteger("1");
BigInteger sum=new BigInteger("0");
for(int i=1;i<50;i++) {
n=n.multiply(new BigInteger(""+i));
sum=sum.add(n);
System.out.println("i="+i+"时,sum后九位是:"+sum.mod(new BigInteger(""+1000000000)));
}
}
}
i=1时,sum后九位是:1
i=2时,sum后九位是:3
i=3时,sum后九位是:9
i=4时,sum后九位是:33
i=5时,sum后九位是:153
i=6时,sum后九位是:873
i=7时,sum后九位是:5913
i=8时,sum后九位是:46233
i=9时,sum后九位是:409113
i=10时,sum后九位是:4037913
i=11时,sum后九位是:43954713
i=12时,sum后九位是:522956313
i=13时,sum后九位是:749977113
i=14时,sum后九位是:928268313
i=15时,sum后九位是:602636313
i=16时,sum后九位是:392524313
i=17时,sum后九位是:820620313
i=18时,sum后九位是:526348313
i=19时,sum后九位是:935180313
i=20时,sum后九位是:111820313
i=21时,sum后九位是:821260313
i=22时,sum后九位是:428940313
i=23时,sum后九位是:405580313
i=24时,sum后九位是:844940313
i=25时,sum后九位是:828940313
i=26时,sum后九位是:412940313
i=27时,sum后九位是:180940313
i=28时,sum后九位是:684940313
i=29时,sum后九位是:300940313
i=30时,sum后九位是:780940313
i=31时,sum后九位是:660940313
i=32时,sum后九位是:820940313
i=33时,sum后九位是:100940313
i=34时,sum后九位是:620940313
i=35时,sum后九位是:820940313
i=36时,sum后九位是:20940313
i=37时,sum后九位是:420940313
i=38时,sum后九位是:620940313
i=39时,sum后九位是:420940313
i=40时,sum后九位是:420940313
i=41时,sum后九位是:420940313
i=42时,sum后九位是:420940313
i=43时,sum后九位是:420940313
i=44时,sum后九位是:420940313
i=45时,sum后九位是:420940313
i=46时,sum后九位是:420940313
i=47时,sum后九位是:420940313
i=48时,sum后九位是:420940313
i=49时,sum后九位是:420940313
i=50时,sum后九位是:420940313
💯💯结果可以发现,从第39项开始,最后9位数字就没有变化了,所以答案就是420940313

问题描述
哈沙德数是指在某个固定的进位制当中,可以被各位数字之和整除的正整数。例如 126 是十进制下的一个哈沙德数,因为 (126)10 mod (1+2+6) = 0;126也是八进制下的哈沙德数,因为 (126)10 = (176)8,(126)10 mod (1 + 7 + 6) = 0;同时 126 也是 16 进制下的哈沙德数,因为 (126)10 = (7e)16,(126)10 mod (7 + e) = 0。小蓝认为,如果一个整数在二进制、八进制、十进制、十六进制下均为哈沙德数,那么这个数字就是幸运数字,第 1 至第 10 个幸运数字的十进制表示为:1 , 2 , 4 , 6 , 8 , 40 , 48 , 72 , 120 , 126 . . . 。现在他想知道第 2023 个幸运数字是多少?你只需要告诉小蓝这个整数的十进制表示即可。
答案提交
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
🍒🍒 这道题目单纯考察进制转换,调用Java现成的API即可:
十进制转二进制:Integer.toBinaryString(i)
十进制转八进制:Integer.toOctalString(i)
十进制转十六进制:Integer.toHexString(i)
💥💥求数位之和要注意:十六进制字符串可能包含a-f,所以需要特殊处理。
public class 试题B_幸运数字 {
//求一个数字字符串的数位之和
public static int getSum(String s) {
int sum=0;
for(int i=0;i<s.length();i++) {
if(s.charAt(i)>='a'&&s.charAt(i)<='f') //如果是a-f
sum+=s.charAt(i)-'a'+10;
else //如果是数字
sum+=s.charAt(i)-'0';
}
return sum;
}
public static void main(String[] args) {
int count=0;
for(int i=1;i<1000000;i++) {
String a2=Integer.toBinaryString(i); //转为二进制
String a8=Integer.toOctalString(i); //转为八进制
String a16=Integer.toHexString(i); //转为十六进制
if(i%getSum(a2)==0&&i%getSum(a8)==0&&i%getSum(a16)==0&&i%getSum(""+i)==0) {
count++;
if(count==2023) {
System.out.println("第 2023 个幸运数字是:"+i);
break;
}
}
}
}
}
第 2023 个幸运数字是:215040

问题描述
小蓝有一个长度为 N 的数组 A = [A0, A1, . . .,AN−1]。现在小蓝想要从 A 对应的数组下标所构成的集合 I = {0, 1, 2, . . . , N − 1} 中找出一个子集 R1,那么 R1在 I 中的补集为 R2。记 S1 = ∑ r ∈ R1 Ar,S2 = ∑ r ∈ R2 Ar,我们要求 S1 和 S2 均为偶数,请问在这种情况下共有多少种不同的 R1。当 R1 或 R2 为空集时我们将S 1 或 S 2 视为 0。
输入格式
第一行一个整数 T,表示有 T 组数据。
接下来输入 T 组数据,每组数据包含两行:第一行一个整数 N,表示数组A 的长度;第二行输入 N 个整数从左至右依次为 A0, A1, . . . , AN−1,相邻元素之间用空格分隔。
输出格式
对于每组数据,输出一行,包含一个整数表示答案,答案可能会很大,你需要将答案对 1000000007 进行取模后输出。
样例输入
2
2
6 6
2
1 6
样例输出
4
0
样例说明
对于第一组数据,答案为 4。(注意:大括号内的数字表示元素在数组中的下标。)
R1 = {0}, R2 = {1};此时 S 1 = A0 = 6 为偶数, S 2 = A1 = 6 为偶数。
R1 = {1}, R2 = {0};此时 S 1 = A1 = 6 为偶数, S 2 = A0 = 6 为偶数。
R1 = {0, 1}, R2 = {};此时 S 1 = A0 + A1 = 12 为偶数, S 2 = 0 为偶数。
R1 = {}, R2 = {0, 1};此时 S 1 = 0 为偶数, S 2 = A0 + A1 = 12 为偶数。
对于第二组数据,无论怎么选择,都不满足条件,所以答案为 0。
评测用例规模与约定
对于 20% 的评测用例,1 ≤ N ≤ 10。
对于 40% 的评测用例,1 ≤ N ≤ 102。
对于 100% 的评测用例,1 ≤ T ≤ 10, 1 ≤ N ≤ 103, 0 ≤ Ai ≤ 109。
🍓🍓 这道题我想到的是暴力解法。对于所给数组A(元素可重复),用回溯法求解出其所有的子集R1,将数组A的元素和 - 子集R1的元素和,即得到补集R2的元素和,然后判断是否满足条件。
💥💥 注意:将答案对 1000000007 进行取模后输出
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;
import java.util.stream.Collectors;
// 子集类
class SubSet{
List<List<Integer>> res=new LinkedList<List<Integer>>();//存储所有子集
LinkedList<Integer> track=new LinkedList<Integer>(); //存储一个子集
boolean[] used; //记录是否访问过
// 求出所有子集
List<List<Integer>> subset(int[] nums){
used=new boolean[nums.length];
backtrack(nums, 0);
return res;
}
// 回溯法求子集
void backtrack(int[] nums,int start) {
res.add(new LinkedList<Integer>(track));
//回溯框架
for(int i=start;i<nums.length;i++) {
//不用剪枝,可以重复
// if(i>start&&nums[i]==nums[i-1]&&!used[i-1]))
// continue;
//选择
used[i]=true;
track.add(nums[i]);
//进入下一层回溯
backtrack(nums, i+1);
//撤销选择
track.removeLast();
used[i]=false;
}
}
}
public class 试题C_数组分割 {
//返回一个列表的所有数字的和
public static int getSum(List<Integer> nums) {
int sum=0;
for(int e:nums)
sum+=e;
return sum;
}
//统计满足条件的R1个数
public static int count(int[] A) {
SubSet subSet=new SubSet();
List<List<Integer>> resList=subSet.subset(A);
int count=0; //统计满足情况的R1个数
for(List<Integer> R1:resList) {
//将数组A转为List
List<Integer> listA=Arrays.stream(A).boxed().collect(Collectors.toList());
//R1的补集R2的元素和S2
int S2=(getSum(listA)-getSum(R1))%2;
if(getSum(R1)%2==0&&S2==0)
count++;
}
return count%1000000007;
}
public static void main(String[] args) {
//输入
Scanner sc=new Scanner(System.in);
int T=sc.nextInt(); //有T组数据
int[] res=new int[T]; //记录每组数据的结果
for(int i=0;i<T;i++) {
int N=sc.nextInt();
int[] A=new int[N]; //存放每组数据
for(int j=0;j<N;j++) {
A[j]=sc.nextInt();
}
res[i]=count(A);
}
for(int i=0;i<T;i++) {
System.out.println(res[i]);
}
}
}

问题描述
平面上有个两个矩形 R1 和 R2,它们各边都与坐标轴平行。设 (x1, y1) 和(x2, y2) 依次是 R1 的左下角和右上角坐标,(x3, y3) 和 (x4, y4) 依次是 R2 的左下角和右上角坐标,请你计算 R1 和 R2 的总面积是多少?
注意:如果 R1 和 R2 有重叠区域,重叠区域的面积只计算一次。
输入格式
输入只有一行,包含 8 个整数,依次是:x1,y1,x2,y2,x3,y3,x4 和 y4。
输出格式
一个整数,代表答案。
样例输入
2 1 7 4 5 3 8 6
样例输出
22
评测用例规模与约定
对于 20% 的数据,R1 和 R2 没有重叠区域。
对于 20% 的数据,其中一个矩形完全在另一个矩形内部。
对于 50% 的数据,所有坐标的取值范围是 [0, 10^3]。
对于 100% 的数据,所有坐标的取值范围是 [0, 10^5]。
🍉🍉这道题是纯数学模拟题。总共分三种情况:
- R1和R2完全不重合
矩形总面积=R1的面积+R2的面积- R1完全在R2内部或R2完全在R1内部
矩形总面积=R1的面积或R2的面积- R1和R2有部分重叠
矩形总面积=R1的面积+R2的面积-重叠部分的面积
这种情况单纯列举的话,要判断8种情况(如下图),很麻烦。。。
然后我列举其中几种情况,写出表达式以后,发现了一个规律:
将x={x1,x2,x3,x4}和y={y1,y2,y3,y4}分别从小到大排序,重叠部分面积=(x[2]-x[1])*(y[2]-y[1]),这样就不用列举8种情况啦!感兴趣的同学可以试试验证一下!
注意:对于 100% 的数据,所有坐标的取值范围是 [0, 10^5],所以记得开long,不然就爆啦!
import java.util.Arrays;
import java.util.Scanner;
public class 试题D_矩形总面积 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
long x1=sc.nextLong();
long y1=sc.nextLong();
long x2=sc.nextLong();
long y2=sc.nextLong();
long x3=sc.nextLong();
long y3=sc.nextLong();
long x4=sc.nextLong();
long y4=sc.nextLong();
long res=0L;
//R1 和 R2 没有重叠区域
if(x2<=x3||x1>=x4||y2<=y3||y1>=y4) {
res=(x2-x1)*(y2-y1)+(x4-x3)*(y4-y3);
System.out.println(res);
}
//R2完全在R1内部
else if(x1<=x3&&x4<=x2&&y1<=y3&&y4<=y2) {
res=(x2-x1)*(y2-y1);
System.out.println(res);
}
//R1完全在R2内部
else if(x3<=x1&&x2<=x4&&y3<=y1&&y2<=y4) {
res=(x4-x3)*(y4-y3);
System.out.println(res);
}
//R1和R2有部分重叠
else {
long[] x= {x1,x2,x3,x4};
long[] y= {y1,y2,y3,y4};
Arrays.sort(x);
Arrays.sort(y);
//减去重复部分的面积
res=(x2-x1)*(y2-y1)+(x4-x3)*(y4-y3)-(x[2]-x[1])*(y[2]-y[1]);
System.out.println(res);
}
}
}
问题描述
小蓝在玩一款种地游戏。现在他被分配给了两块大小均为 N × N 的正方形区域。这两块区域都按照 N × N 的规格进行了均等划分,划分成了若干块面积相同的小区域,其中每块小区域要么是岩石,要么就是土壤,在垂直或者水平方向上相邻的土壤可以组成一块土地。现在小蓝想要对这两块区域沿着边缘进行合并,他想知道合并以后可以得到的最大的一块土地的面积是多少(土地的面积就是土地中土壤小区域的块数)?
在进行合并时,小区域之间必须对齐。可以在两块方形区域的任何一条边上进行合并,可以对两块方形区域进行 90 度、180 度、270 度、360 度的旋转,但不可以进行上下或左右翻转,并且两块方形区域不可以发生重叠。
输入格式
第一行一个整数 N 表示区域大小。
接下来 N 行表示第一块区域,每行 N 个值为 0 或 1 的整数,相邻的整数之间用空格进行分隔。值为 0 表示这块小区域是岩石,值为 1 表示这块小区域是土壤。
再接下来 N 行表示第二块区域,每行 N 个值为 0 或 1 的整数,相邻的整数之间用空格进行分隔。值为 0 表示这块小区域是岩石,值为 1 表示这块小区域是土壤。
输出格式
一个整数表示将两块区域合并之后可以产生的最大的土地面积。
样例输入
4
0 1 1 0
1 0 1 1
1 0 1 0
1 1 1 0
0 0 1 0
0 1 1 0
1 0 0 0
1 1 1 1
样例输出
15
样例说明
第一张图展示了样例中的两块区域的布局。第二张图展示了其中一种最佳的合并方式,此时最大的土地面积为 15。
评测用例规模与约定
对于 30% 的数据,1 ≤ N ≤ 5。
对于 60% 的数据,1 ≤ N ≤ 15。
对于 100% 的数据,1 ≤ N ≤ 50。
🍉🍉这道题可以用深度优先搜索。(比赛时默写了深搜模板不会用💦💦)一开始看到题目说区域可以进行90 度、180 度、270 度、360 度的旋转,被这个干懵圈了😭😭现在想想其实不用管这个,合并区域的最大面积就是找两个区域四周边缘土地的最大面积之和,所以在每个区域中,利用深度优先搜索,从上下左右四个边缘寻找最大面积的土地(在区域中央的封闭土地就不用理了)。
📢📢这道题和岛屿问题差不多,感兴趣的小伙伴可以看看力扣的这几道题。
👉力扣 695. 岛屿的最大面积
👉力扣 1254. 统计封闭岛屿的数目
👉力扣 200. 岛屿数量
import java.util.Scanner;
public class 试题F_合并区域 {
// 将(x,y)所在的土地变成岩石,并返回该土地面积
public static int dfs(int[][] grid,int x,int y) {
int m=grid.length,n=grid[0].length;
// 超出区域边界
if(x<0||x>=m||y<0||y>=n)
return 0;
// 如果已经是岩石了
if(grid[x][y]==0)
return 0;
// 将土壤变成岩石
grid[x][y]=0;
return dfs(grid, x, y+1)+dfs(grid, x+1, y)+dfs(grid, x, y-1)+dfs(grid, x-1, y)+1;
}
// 记录合并区域的最大面积
public static int maxArea(int[][] grid) {
int m=grid.length,n=grid[0].length;
int res=0;
for(int i=0;i<m;i++) {
// 将区域上边缘的土壤变成岩石,并记录土地的最大面积
res=Math.max(res, dfs(grid, 0, i));
// 将区域下边缘的土壤变成岩石,并记录土地的最大面积
res=Math.max(res,dfs(grid, m-1, i));
}
for(int j=0;j<n;j++) {
// 将区域左边缘的土壤变成岩石,并记录土地的最大面积
res=Math.max(res, dfs(grid, j, 0));
// 将区域右边缘的土壤变成岩石,并记录土地的最大面积
res=Math.max(res, dfs(grid, j, n-1));
}
return res;
}
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int N=sc.nextInt(); //区域大小
int[][] grid1=new int[N][N];
int[][] grid2=new int[N][N];
// 输入区域1
for(int i=0;i<N;i++)
for(int j=0;j<N;j++)
grid1[i][j]=sc.nextInt();
// 输入区域1
for(int i=0;i<N;i++)
for(int j=0;j<N;j++)
grid2[i][j]=sc.nextInt();
System.out.println(maxArea(grid1)+maxArea(grid2));
}
}

💖💖目前先写这几道题的题解,后续有时间的话再写剩余的题解!
🌈🌈有问题的地方希望大家指正呀💗如果你觉得这篇文章对你有帮助,欢迎点赞评论收藏,或者关注我呦!!!爱你们😘

华为OD机试题本篇题目:明明的随机数题目输入描述输出描述:示例1输入输出说明代码编写思路最近更新的博客华为od2023|什么是华为od,od薪资待遇,od机试题清单华为OD机试真题大全,用Python解华为机试题|机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为o
所有题目均有五种语言实现。C实现目录、C++实现目录、Python实现目录、Java实现目录、JavaScript实现目录题目n行m列的矩阵,每个位置上有一个元素你可以上下左右行走,代价是前后两个位置元素值差的绝对值.另外,你最多可以使用一次传送阵(只能从一个数跳到另外一个相同的数)求从走上角走到右下角最少需要多少时间。输入描述:第一行两个整数n,m,分别代表矩阵的行和列。后面n行,每行m个整数,分别代表矩阵中的元素。输出描述:一个整数,表示最少需要多少时间。
目录前言: 一、ASC分析代码实现二、 卡片分析代码实现三、 直线分析代码实现四、货物摆放分析代码实现小结:前言: 在刷题的过程中,发现蓝桥杯的题目和力扣的差别很大。让人有一种不一样的感觉,蓝桥杯题目偏向对于实际问题用编程去的解决,而力扣给人感觉很锻炼自己的编程思维,逻辑能力。两者结合去刷,相信会有不一样的收获。 一、ASC 已知大写字母A的ASCII码为65,请问大写字母L的ASCII码是多少?分析 这道题目看上去很简单,我们需确定自己计算的准确,所以我建议用编程去解决。代码实现publicclassTest8{publicstaticvoidmain(String[]args){Sy
昨晚看到IDEA官推宣布IntelliJIDEA2023.1正式发布了。简单看了一下,发现这次的新版本包含了许多改进,进一步优化了用户体验,提高了便捷性。至于是否升级最新版本完全是个人意愿,如果觉得新版本没有让自己感兴趣的改进,完全就不用升级,影响不大。软件的版本迭代非常正常,正确看待即可,不持续改进就会慢慢被淘汰!根据官方介绍:IntelliJIDEA2023.1针对新的用户界面进行了大量重构,这些改进都是基于收到的宝贵反馈而实现的。官方还实施了性能增强措施,使得Maven导入更快,并且在打开项目时IDE功能更早地可用。由于后台提交检查,新版本提供了简化的提交流程。IntelliJIDEA
?作者主页:静Yu?简介:CSDN全栈优质创作者、华为云享专家、阿里云社区博客专家,前端知识交流社区创建者?社区地址:前端知识交流社区?博主的个人博客:静Yu的个人博客?博主的个人笔记本:前端面试题个人笔记本只记录前端领域的面试题目,项目总结,面试技巧等等。接下来会更新蓝桥杯官方系统基础练习的VIP试题,依然包括解题思路,源代码等等。问题描述:给定当前的时间,请用英文的读法将它读出来。时间用时h和分m表示,在英文的读法中,读一个时间的方法是: 如果m为0,则将时读出来,然后加上“o’clock”,如3:00读作“threeo’clock”。 如果m不为0,则将时读出来,然后将分读出来,如5
目录1. 研究范围定义2. 流程中台市场分析3. 厂商评估:微宏科技4. 入选证书 1. 研究范围定义近年来,随着外部市场环境快速变化、客户需求愈发多样,企业逐渐意识到,自身业务需要更加敏捷、高效,具备根据市场需求快速迭代的能力。业务流程的自动化能够帮助企业实现业务的敏捷高效,因此受到越来越多企业的关注。企业的“自动化武器库”品类丰富,包括低/零代码平台、RPA、BPM、AI等。企业可以使用多项自动化工具,但结果往往是各项自动化工具处于各自的“自动化烟囱”之中,仅能实现碎片式自动化。例如,某企业的IT团队可能在使用低代码平台、财务团队可能在使用RPA、呼叫中心则可能在使用聊天机器人。自动
自从2019年OpenApplicationModel诞生以来,KubeVela已经经历了几十个版本的变化,并向现代应用程序交付先进功能的方向不断发展。最近,KubeVela完成了向CNCF孵化项目的晋升,标志着社区的发展来到一个新的里程碑。今天,KubeVela社区内活跃着大量来自全球的开发者,共同推动KubeVela项目的落地和发展。在即将开幕的KubeCon+CloudNatvieConEurope2023上,我们惊喜地发现,连续3天,KubeVela项目的贡献者、企业用户和来自阿里云的核心维护者,将从不同角度展对KubeVela项目的分享。让我们先睹为快!🎙️BuildingaPlat
十四届蓝桥青少组模拟赛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)
最近更新的博客华为OD机试-卡片组成的最大数字(Python)|机试题算法思路华为OD机试-网上商城优惠活动(一)(Python)|机试题算法思路华为OD机试-统计匹配的二元组个数(Python)|机试题算法思路华为OD机试-找到它(Python)|机试题算法思路华为OD机试-九宫格按键输入(Python)|机试算法备考思路华为OD机试-身高排序(Python)|备考思路使用说明参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高。华为OD清单查看地址:blog.csdn.net/hihell/catego
本文代码使用HAL库。文章目录前言一、MCP4017的重要特性二、MCP4017计算RBW阻值三、MCP4017地址四、MCP4017读写函数五、CubeMX创建工程(利用ADC测量MCP4017电压)、对应代码:总结前言一、MCP4017的重要特性蓝桥杯板子上的是MCP4017T-104ELT,如图1。MCP4017是一个可编程电阻,通过写入的数值可以改变电阻的大小。重点在于6引脚(W),5引脚(B