首页
关于
Search
1
晒谷子
199 阅读
2
python初学示例
182 阅读
3
欢迎使用 Typecho
162 阅读
4
痛
159 阅读
5
爷做的菜
157 阅读
默认分类
登录
Search
Typecho
累计撰写
32
篇文章
累计收到
3
条评论
首页
栏目
默认分类
页面
关于
搜索到
32
篇与
默认分类
的结果
2023-03-05
基于点灯科技的esp8266控制舵机
材料:esp8266 nodeMcu SG90;接线 3v D5 GND;引脚图 代码#define BLINKER_PRINT Serial #define BLINKER_WIFI #include<Servo.h> #include <Blinker.h> Servo myservo; //定义一个舵机对象 int _servo = 14; char auth[] = "your key"; char ssid[] = "mywifi";//wifi ssid char pswd[] = "12345678";// wifi password // 新建组件对象 BlinkerButton Button1("btn-abc"); BlinkerNumber Number1("num-abc"); BlinkerButton btn2("round_max"); BlinkerButton btn3("round_min"); int counter = 0; // 按下按键即会执行该函数 void button1_callback(const String & state) { BLINKER_LOG("get button state: ", state); digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN)); } //按下按钮round_max旋转舵机到最大值 void button2_callback(const String & state){ Serial.println(state); BLINKER_LOG("get button state: ", 180); myservo.write(180); Blinker.vibrate(); // delay(10); // myservo.write(0); // Blinker.vibrate(); } //按下按钮round_min旋转舵机到最小值 void button3_callback(const String & state){ Serial.println(state); BLINKER_LOG("get button state: ", 0); myservo.write(0); Blinker.vibrate(); // delay(10); // myservo.write(0); // Blinker.vibrate(); } // 如果未绑定的组件被触发,则会执行其中内容 void dataRead(const String & data) { BLINKER_LOG("Blinker readString: ", data); counter++; Number1.print(counter); } void setup() { // 初始化串口 Serial.begin(9600); #if defined(BLINKER_PRINT) BLINKER_DEBUG.stream(BLINKER_PRINT); #endif myservo.attach(_servo); //设置指定的IO为舵机 myservo.write(0); // 初始化有LED的IO pinMode(LED_BUILTIN, OUTPUT); digitalWrite(LED_BUILTIN, HIGH); // 初始化blinker Blinker.begin(auth, ssid, pswd); Blinker.attachData(dataRead); Button1.attach(button1_callback); btn2.attach(button2_callback); btn3.attach(button3_callback); } void loop() { Blinker.run(); }
2023年03月05日
15 阅读
0 评论
0 点赞
2023-02-13
截断数组
题目给定一个长度为 n 的数组 a1,a2,…,an。现在,要将该数组从中间截断,得到三个非空子数组。要求,三个子数组内各元素之和都相等。请问,共有多少种不同的截断方法?输入格式第一行包含整数 n。第二行包含 n 个整数 a1,a2,…,an。输出格式输出一个整数,表示截断方法数量。数据范围前六个测试点满足 1≤n≤10。所有测试点满足 1≤n≤105,−10000≤ai≤10000。输入样例1:41 2 3 3输出样例1:1输入样例2:51 2 3 4 5输出样例2:0输入样例3:20 0输出样例3:0分析我们数组开辟100010个输入从i=1开始先对数组进行求一个前缀和,取前缀和最后一位得到总和,如果sum%3!=0那么这个数组是不能进行截断的total%3==0,满足该条件下的数组是绝对可以进行截断 我们对前缀和数组进行一个遍历遍历sum[i]==total/3时 cns++;sum[i]==total/3*2时 count++;我们最后的结果其实就是res = count*cns边界问题for(int i=2;i<=n-1;i++)i=2的原因:因为说的是三份,非空,所以第一份数组必须至少包含i=1i<=n-1的原因:最后一个i=n;第三个数组必须至少包含i=n#include <iostream> #include <cstring> #include <algorithm> using namespace std; const int N = 100010; int a[N]; long long sum[N]; int main() { int n; long long cns=0,count=0,total=0,ave=0; cin >> n; for (int i = 1; i <= n; i ++ ) { scanf("%d",&a[i]); sum[i]=a[i]; sum[i]+=sum[i-1]; total+=a[i]; } if(total%3!=0) { cout << "0"<<endl; }else{ ave=total/3; for(int i=2;i<=n-1;i++) { if(ave==sum[i-1]) cns++; if(2*ave==sum[i]) count+=cns; } cout << count<<endl; } }
2023年02月13日
40 阅读
0 评论
0 点赞
2023-02-09
关于单个flask接口的微信request合法域名认证(无需借助任何集成环境)
引言我们经常用flask开发一个简单的接口又想在微信公众号上能够调用这是微信公众号添加请求地址页面 但是我们用单个flask获取的网址为http://ip:端口 这与微信公众号所要求的不符合方法我们可以将域名以A记录解析到服务器再在腾讯云申请一个免费的ssl证书 腾讯云ssl申请链接 将申请的该证书下载下来(nginx)获取的压缩包中我们有如下文件 我们只需要解压出后缀为.csr .key的配置文件即可在服务器上运行 pip install pyOpenSSL安装完成后# 配置ssl证书文件文件 ssl_keys = ('server.crt', 'server.key') # 修改启动参数,增加 ssl_context=ssl_keys 即可 app.run(debug='True', port='8080', host='0.0.0.0', ssl_context=ssl_keys)按这样的代码改即可最后我们得到的地址是https://domain.com:8080;这样就可以完美填入微信公众号request合法域名了解析的时候不需要管哪个端口,只需要解析到服务器地址即可
2023年02月09日
37 阅读
0 评论
0 点赞
2023-02-07
蓝桥杯2022年第十三届省赛真题-X进制减法
题目进制规定了数字在数位上逢几进一。X 进制是一种很神奇的进制,因为其每一数位的进制并不固定!例如说某种 X 进制数,最低数位为二进制,第二数位为十进制,第三数位为八进制,则 X 进制数 321 转换为十进制数为 65。现在有两个 X 进制表示的整数 A 和 B,但是其具体每一数位的进制还不确定,只知道 A 和 B 是同一进制规则,且每一数位最高为 N 进制,最低为二进制。请你算出 A − B 的结果最小可能是多少。请注意,你需要保证 A 和 B 在 X 进制下都是合法的,即每一数位上的数字要小于其进制。 输入格式第一行一个正整数 N,含义如题面所述。第二行一个正整数 Ma,表示 X 进制数 A 的位数。第三行 Ma 个用空格分开的整数,表示 X 进制数 A 按从高位到低位顺序各个数位上的数字在十进制下的表示。第四行一个正整数 Mb,表示 X 进制数 B 的位数。第五行 Mb 个用空格分开的整数,表示 X 进制数 B 按从高位到低位顺序各个数位上的数字在十进制下的表示。请注意,输入中的所有数字都是十进制的。输出格式输出一行一个整数,表示 X 进制数 A − B 的结果的最小可能值转换为十进制后再模 1000000007 的结果。 样例输入11310 4 031 2 0样例输出94提示当进制为:最低位 2 进制,第二数位 5 进制,第三数位 11 进制时,减法得到的差最小。此时 A 在十进制下是 108,B 在十进制下是 14,差值是 94。对于 30% 的数据,N ≤ 10; Ma, Mb ≤ 8. 对于 100% 的数据,2 ≤ N ≤ 1000; 1 ≤ Ma, Mb ≤ 100000; A ≥ B. 分析最后的数据肯定很大,我们sum采用long long;输入的时候采用从大索引到小索引,数字从高位到低位,因为需要防止位数不对应x进制转换成十进制的例子321 题中给出分别为 8 10 2 进制310*2+22+1本题就只需要把高位每一位的差值控制到最小;根据提示,我们可以找到规律,就是每一位的进制数就是max(a[i],b[i])+1;特别注意,还存在0,1这两种情况,我们采用二进制,所以得到的表达式是max(max(a[i]+1,b[i]+1),2);设置数组的时候放到static中,这样直接初始化的时候全部元素都是0,如果在int main中就需要设置memset(a,0,sizeof(a));最主要的算法如下for(int i=ma;i>1;i--) { sum=(sum+a[i]+b[i])*max(max(a[i-1]+1,b[i-1]+1),2)%1000000007; }我们拿出示例10 4 01 2 0带入上面的算法中我们可以得到sum=((0+10-1)5+4-2)2简单化简可化为sum=9*5*2+2*2这里有个需要注意的,我们只循环了ma-1次,还有一个a[1],b[1]没有用真正的sum还需要加上(a[1]-b[1]);代码#include<iostream> #include<cmath> using namespace std; const int N=100010; int a[N],b[N]; int main(){ int ma,mb,n; cin>>n; cin>>ma; for(int i=ma;i>0;i--) cin>>a[i]; cin>>mb; for(int i=mb;i>0;i--) cin>>b[i]; long long sum=0; for(int i=ma;i>1;i--) sum=(sum+a[i]-b[i])*max(max(a[i-1]+1,b[i-1]+1),2)%1000000007; sum+=a[1]-b[1]%1000000007; cout<<sum<<endl; }有问题,请斧正
2023年02月07日
54 阅读
0 评论
0 点赞
2023-02-03
蓝桥杯大赛软件类省赛C/C++大学B组-修剪灌木
题目题目描述爱丽丝要完成一项修剪灌木的工作。有 N 棵灌木整齐的从左到右排成一排。爱丽丝在每天傍晚会修剪一棵灌木,让灌木的高度变为 0 厘米。爱丽丝修剪灌木的顺序是从最左侧的灌木开始,每天向右修剪一棵灌木。当修剪了最右侧的灌木后,她会调转方向,下一天开始向左修剪灌木。直到修剪了最左的灌木后再次调转方向。然后如此循环往复。灌木每天从早上到傍晚会长高 1 厘米,而其余时间不会长高。在第一天的早晨,所有灌木的高度都是 0 厘米。爱丽丝想知道每棵灌木最高长到多高。输入格式一个正整数 N ,含义如题面所述。输出格式输出 N 行,每行一个整数,第行表示从左到右第 i 棵树最高能长到多高。样例输入3样例输出424提示对于 30% 的数据,N ≤ 10. 对于 100% 的数据,1 < N ≤ 10000.分析000111011122103214210321301412012得出最高的值取决于左右两边的长度,取最长的再乘2;即第一棵树=(n-1)*2则第i棵树max(i-1,n-i);//i-1得出左侧有多少,n-i得右侧数量,取max对所取得max*2即可得出答案#include<iostream> #include<cmath> using namespace std; int main() { int N; cin>>N; for(int i=1;i<=N;i++) { cout<<2*max(i-1,N-i)<<endl; } }
2023年02月03日
31 阅读
0 评论
0 点赞
1
2
...
7