May 5, 2022

N皇后

BV14Y4y1C7SW 以下是错误代码 / 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 #include <bits/stdc++.h> using namespace std; int hash[10][10]; int cnt; void doAdd(int r, int c, int n, int val) { if (r < 0 || r >= n) { return ; } if (c < 0 || c >= n) { return ; } hash[r][c] += val; } void add(int r, int c, int n, int val) { int i; for (i = 0; i < n; i++) { doAdd(r, i, n, val); doAdd(i, c, r, val); } for (i = 0; i < n; i++) { doAdd(r + 1, c + 1, n, val) doAdd(r - 1, c - 1, n, val) doAdd(r + 1, c - 1, n, val) doAdd(r - 1, c + 1, n, val) } } void dfs(int depth, int maxDepth) { int i; if (depth == maxDepth) { ++cnt; return ; } for (i = 0; i < maxDepth; i++) { if (hash[depth][i] == 0) { add(depth, i, maxDepth, i); dfs(depth + 1, maxDepth); add(depth, i, maxDepth, -i) } } } int main() { int n; cin >> n; memset(hash, 0, sizeof(hash)); dfs(0, n); return cnt; } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 package PACK6; // https://www.bilibili.com/video/BV14Y4y1C7SW public class N皇后 { // 首先定义一个哈希表 hash ij大于0 表示这个位置不能放皇后 static int[][] hash = new int[10][10]; // 定义全局变量cnt 表示方案数 static int cnt; public static void doADD(int r, int c, int n, int val) { // 如果行的范围越越界则标记无效 if (r < 0 || r >= n) { return; } // 如果列的范围越越界则标记无效 if (c < 0 || c >= n) { return; } // 如果对应位置是安全的,也就是没有皇后能够攻击到,则标记为1 // (否则在对应位置的hash数组执行标记) if (hash[r][c] == 0) { hash[r][c] = val; } } // 实现放置皇后的过程 public static void add(int r,int c ,int n,int val) { // val = 1; // 代表(r,c)位置放置了一个皇后 // val = -1; // 代表(r,c)位置取出了一个皇后 int i; for (i = 0; i < n; i++) { // 每放入一个皇后,需要将他所在的行,所在的列,所在的对角线 都进行标记 doADD(r, i, n, val); // 标记所在行 doADD(i, c, n, val); // 标记所在列 } for (i = 1; i <= n; i++) { // 标记主对角线 doADD(r + i, c + i, n, val); doADD(r - i, c - i, n, val); // 标记副对角线 doADD(r + i, c - i, n, val); doADD(r - i, c + i, n, val); } } public static void dfs(int depth, int maxDepth) { // 当前要放置的行号和总共要放置的行数 // 如果当前行数==总行数 方案数+1 函数直接返回 if (depth == maxDepth) { cnt++; return; } // 在当前行的每一列 for (int i = 0; i < maxDepth; i++) { // 如果发现有对应位置是安全的,也就是没有皇后能够攻击到, if (hash[depth][i] == 0) { // 则调用add放置一个皇后 add(depth, i, maxDepth, 1); // 递归求解下一行 dfs(depth + 1, maxDepth); // 递归退出后,删除放置的皇后(取回前面放置的皇后) add(depth, i, maxDepth, -1); } } } public static int fakeMain(int n) { // 初始化cnt = 0; cnt = 0; // 初始化hash ij = 0,表示一开始一个空的棋盘 for (int i = 0; i < 10; i++) { for (int j = 0; j < 10; j++) { hash[i][j] = 0; } } // 递归模拟每一行放置皇后后的情况 dfs(0, n); return cnt; } public static void main(String[] args) { fakeMain(4); } } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 class Solution { int hash[10][10]; int cnt; // 实现标记 void doAdd(int r, int c, int n, int val) { // 如果行的范围越界 则标记失败 if (r < 0 || r >= n) { return; } // 如果列的范围越界 则标记失败 if (c < 0 || c >= n) { return; } // 否则在对应的位置上的hash数组执行标记 hash[r][c] += val; } // 实现放置皇后的过程 void add(int r,int c,int n,int val) { int i; for (i = 0; i < n; i++) { doAdd(r,i,n,val); doAdd(i,c,r,val); } for (i = 0; i < n; i++) { // 标记主对角线 doAdd(r+i,c+i,n,val); doAdd(r-i,c-i,n,val); // 标记副对角线 doAdd(r+i,c-i,n,val); doAdd(r-i,c+i,n,val); } } void dfs(int depth, int maxDepth) { int i; if(depth == maxDepth) { ++cnt; return ; } for (i = 0; i < maxDepth; i++) { if(hash[depth][i] == 0) //对应位置安全,没有皇后能攻击到 { // 则调用add放置一个皇后 add(depth, i, maxDepth , 1); // 递归求解下一行 dfs(depth + 1, maxDepth); // 递归推出后,取出皇后 add(depth, i, maxDepth, -1); } } } public: int totalNQueens(int n) { cnt = 0; memset(hash, 0, sizeof(hash)); dfs(0,n); return cnt; } }
Read more

密码学入门

5.2-5.5密码学习记录 看我回旋踢 synt{} / 凯撒密码加密解密 synt{5pq1004q-86n5-46q8-o720-oro5on0417r1} / 将flag与synt进行对照 / s在26位字母中是第19位,f是第6位,由于这里是解密,需要向前推算,所以偏移量为13 / y是第25位,l为12位,偏移量也是13
Read more
May 2, 2022

转载知乎的科学文章

一学就会,树莓派4B搭建V2Ray图文教程 芝妈小汤圆 / 这是我的第1篇原创技术文章 大家好,我是芝妈,一个90后程序媛妈妈~ / 作为一个自学成才的前端工程师,最近我又对硬件树莓派产生了兴趣。主要是最近小汤圆去上托班了,我全职在家闲得慌,盘算着开始给他启蒙。
Read more
April 27, 2022

重构前(水果店管理系统)

1 2 3 4 5 6 7 8 // 水果店管理系统 // 实现水果店的增删改查 // TODO 显示全表 // TODO 修改水果库存 // TODO 修改水果价格 // TODO 添加水果(增) // TODO 退出系统 // TODO 各个欢迎和交互语句 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 import java.util.Scanner; public class 水果店管理系统 { // 水果店管理系统 // 实现水果店的增删改查 // TODO 显示全表 // TODO 修改水果库存 // TODO 修改水果价格 // TODO 添加水果(增) // TODO 退出系统 // TODO 各个欢迎和交互语句 public static void main(String[] args) { String[][] 表头; // TODO 创建初始水果信息 表头 = new String[][]{ {"水果名称", "水果价格(元/每斤)", "水果库存(斤)"}, {"苹果", "3.5", "10"}, {"香蕉", "2.5", "20"}, {"西瓜", "3.5", "30"}, {"荔枝", "5.5", "40"}, {"梨", "2.5", "50"}, }; // TODO 修改水果信息 (输入后)查找,修改,删除,输出 操作选择的while语句 Scanner cin = new Scanner(System.in); int 操作选择 = 0; while (true) { // TODO 欢迎语句 System.out.println(); // 格式化 System.out.println("请选择操作:"); // 交互 // System.out.print("1.查找" + "\t" + "2.修改" + "\t" + "3.删除" + "\t" + "4.输出" + "\t" + "5.退出" + "\n"); System.out.print("1.查找" + "\t" + "2.增加" + "\t" + "3.修改" + "\t" + "4.删除" + "\t" + "5.输出(此功能优先选择选项7)" + "\t" + "6.退出" + "\t" + "7.只读模式打开表格" + "\n"); 操作选择 = cin.nextInt(); if (操作选择 == 1) { System.out.println("请输入要查找的水果名称:(输入0返回主菜单)"); String 查找水果名称 = cin.next(); if (查找水果名称.equals("0")) { continue; } // TODO 查找水果信息 int for计数器 = 0; for (int i = 0; i < 表头.length; i++) { // 行 if (表头[i][0].equals(查找水果名称)) { // .equals() 方法用于比较两个字符串是否相等。 == 比较的是两个对象的地址 -> https://www.cnblogs.com/Whichzzz/p/15684836.html(==与equals的区别) System.out.println("水果名称:" + 表头[i][0]); System.out.println("水果价格:" + 表头[i][1]); System.out.println("水果库存:" + 表头[i][2]); for计数器++; } } if (for计数器 == 0) { System.out.println("查找失败!没有这个数据"); } } if (操作选择 == 2) { System.out.println("请输入要添加的水果名称:(输入0返回主菜单)"); String 添加水果名称 = cin.next(); if (添加水果名称.equals("0")) { continue; } System.out.println("请输入要添加的水果价格:(输入0返回主菜单)"); String 添加水果价格 = cin.next(); if (添加水果价格.equals("0")) { continue; } System.out.println("请输入要添加的水果库存:(输入0返回主菜单)"); String 添加水果库存 = cin.next(); if (添加水果库存.equals("0")) { continue; } // TODO 添加水果信息(未完成) String[][] 新表头 = new String[表头.length + 1][表头[0].length]; for (int i = 0; i < 表头.length; i++) { for (int j = 0; j < 表头[0].length; j++) { 新表头[i][j] = 表头[i][j]; } } // 遍历输出新表头 for (int i = 0; i < 新表头.length; i++) { for (int j = 0; j < 新表头.length; j++) { System.out.println(新表头[i][j]); } } System.out.println("操作完成"); } if (操作选择 == 3) { System.out.println("请输入要修改的水果名称:(输入0返回主菜单)"); String 修改水果名称 = cin.next(); if (修改水果名称.equals("0")) { continue; } System.out.println("请输入要修改的水果价格:(输入0返回主菜单)"); String 修改水果价格 = cin.next(); if (修改水果价格.equals("0")) { continue; } System.out.println("请输入要修改的水果库存:"); String 修改水果库存 = cin.next(); // TODO 修改水果信息 for (int i = 0; i < 表头.length; i++) { if (表头[i][0].equals(修改水果名称)) { 表头[i][1] = 修改水果价格; 表头[i][2] = 修改水果库存; } } System.out.println("操作完成"); } if (操作选择 == 4) { System.out.println("请输入要删除的水果名称:"); String 删除水果名称 = cin.next(); // TODO 删除水果信息 for (int i = 0; i < 表头.length; i++) { if (表头[i][0].equals(删除水果名称)) { 表头[i][0] = ""; 表头[i][1] = ""; 表头[i][2] = ""; } } } if (操作选择 == 5) { // TODO 输出水果信息 for (int i = 0; i < 表头.length; i++) { System.out.println("水果名称:" + 表头[i][0]); System.out.println("水果价格:" + 表头[i][1]); System.out.println("水果库存:" + 表头[i][2]); } } if (操作选择 == 6) { // TODO 退出系统 break; } if (操作选择 == 7) { // TODO 查看所有水果信息 for (int i = 0; i < 表头.length; i++) { System.out.println("水果名称:" + 表头[i][0]); System.out.println("水果价格:" + 表头[i][1]); System.out.println("水果库存:" + 表头[i][2]); System.out.println("----------------------------------"); } } } } }
Read more
April 27, 2022

重构后(水果店管理系统)

1 2 3 4 5 6 7 8 9 /** * @author L1653 水果店管理 分public. * // TODO 显示全表 * // TODO 修改水果库存 * // TODO 修改水果价格 * // TODO 添加水果(增) * // TODO 退出系统 * // TODO 各个欢迎和交互语句 */ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 import java.util.Scanner; /** * @author L1653 水果店管理 分public. * // TODO 显示全表 * // TODO 修改水果库存 * // TODO 修改水果价格 * // TODO 添加水果(增) * // TODO 退出系统 * // TODO 各个欢迎和交互语句 */ public class S09E06重构类 { public static void main(String[] args) { String[][] 表头; 表头 = new String[][]{ {"水果", "数量", "单价"}, {"苹果", "10", "5.5"}, {"香蕉", "20", "3.5"}, {"西瓜", "30", "4.5"}, {"葡萄", "40", "6.5"}, {"荔枝", "50", "7.5"}, {"柠檬", "60", "8.5"}, {"梨", "70", "9.5"}, {"桃", "80", "10.5"}, {"柚子", "90", "11.5"}, {"桔子", "100", "12.5"}, }; // TODO 修改水果信息 (输入后)查找,修改,删除,输出 操作选择的while语句 Scanner cin = new Scanner(System.in); while (true) { // TODO 显示全表 显示表格(表头); System.out.println("请选择操作:"); /** System.out.println("1.查找"); System.out.println("2.修改"); System.out.println("3.删除"); System.out.println("4.输出"); System.out.println("5.退出"); */ System.out.println("1.查找" + "\t" + "2.修改"+ "\t" + "3.删除"+ "\t" + "4.输出"+ "\t" + "5.退出"); int 选择 = cin.nextInt(); switch (选择) { case 1: System.out.println("请输入要查找的水果名称:"); String 水果名称 = cin.next(); 查找水果(水果名称, 表头); break; case 2: System.out.println("请输入要修改的水果名称:"); String 水果名称2 = cin.next(); System.out.println("请输入要修改的数量:"); int 数量 = cin.nextInt(); System.out.println("请输入要修改的单价:"); double 单价 = cin.nextDouble(); 修改水果(水果名称2, 数量, 单价, 表头); break; case 3: System.out.println("请输入要删除的水果名称:"); String 水果名称3 = cin.next(); 删除水果(水果名称3, 表头); break; case 4: 输出水果(表头); break; case 5: System.out.println("退出"); return; default: System.out.println("输入错误,请重新输入"); break; } } } // 水果店管理系统 // 实现水果店的增删改查 public static void 查找水果(String 水果名称, String[][] 表头) { /* TODO 查找水果 */ for (int i = 1; i < 表头.length; i++) { if (表头[i][0].equals(水果名称)) { System.out.println("水果名称:" + 表头[i][0]); System.out.println("数量:" + 表头[i][1]); System.out.println("单价:" + 表头[i][2]); } } } public static void 修改水果(String 水果名称, int 数量, double 单价, String[][] 表头) { // TODO 修改水果 for (int i = 1; i < 表头.length; i++) { if (表头[i][0].equals(水果名称)) { 表头[i][1] = String.valueOf(数量); 表头[i][2] = String.valueOf(单价); } } } public static void 删除水果(String 水果名称, String[][] 表头) { // TODO 删除水果 for (int i = 1; i < 表头.length; i++) { if (表头[i][0].equals(水果名称)) { 表头[i][0] = ""; 表头[i][1] = ""; 表头[i][2] = ""; } } } public static void 输出水果(String[][] 表头) { // TODO 输出水果 for (int i = 1; i < 表头.length; i++) { if (!表头[i][0].equals("")) { System.out.println("水果名称:" + 表头[i][0]); System.out.println("数量:" + 表头[i][1]); System.out.println("单价:" + 表头[i][2]); } } } public static void 显示表格(String[][] 表头) { // TODO 显示表格 for (int i = 0; i < 表头.length; i++) { for (int j = 0; j < 表头[i].length; j++) { System.out.print(表头[i][j] + "\t"); // System.out.println(); } System.out.println(); } } }
Read more
April 25, 2022

代码云剪贴板

代码进入查看 / 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 import java.util.Random; import java.util.Scanner; public class Main { static Scanner sc=new Scanner(System.in); public static void main(String[] args) { System.out.println("---欢迎---"); String[]arr=new String[100]; System.out.println("请输入班级人数"); int people= sc.nextInt(); System.out.println("请输入学期课程数"); int course=sc.nextInt(); for (int i=1;i<=course;i++){ System.out.println("请输入第" + i + "门课程"); Scanner sr=new Scanner(System.in); String course1=sr.nextLine(); arr[i]=course1; } System.out.print("学号"); for(int i=0;i<=people;i++){ System.out.print(arr[i]+" "); } System.out.print("总分"+"平均分"); student(people,course); } public static void student(int a,int b){ // int a = people;int b = course; int [][] arr = new int[9][9]; int z=0; int f=0; for (int i=0;i<a;i++){ arr[i][0]=i+1; } for (int i=1;i<a;i++){ for (int j=0;j<b;j++){ Random r=new Random(); int grade= r.nextInt(100)+1; arr[i][j]=grade; } } // TODO 计算行平均分和总分 for (int i=0;i<a;i++){ for (int j=0;j<b;j++){ z=z+arr[i][j]; } f = z/b; //arr[i][b+1]=f; z=0; } // for (int i=0;i<a;i++){ // // 行 // for (int j=1;j<b;j++){ // // 列 // z+=arr[i][j]; // // 总分 // } // f=z/b; // // 平均分 // // arr[i][b+1]=z; // arr[i][b+2]=f; // z=0; // } for (int i=0;i<a;i++){ // 行 for (int j=0;j<b+3;j++){ // 列 System.out.print(" "+arr[i][j]+" "+" \t"); } System.out.println(); } } }
Read more
April 25, 2022

项目概述(已摆烂)

产品描述 / 双目摄像头和深度学习以及物联网加持赋能于’安防产品名字‘,使其根据不同的风险等级去汇报给用户,由程序不间断的检测为用户保证安全 / 用户群体
Read more
April 13, 2022

比赛产品雏形

安防 - 安全产品概览图(具体名字暂未定) 文本展示实现 寄

正则表达式

翻译: English German Español Français Português do Brasil 中文版 日本語 한국어 Turkish Greek Magyar Polish Русский Tiếng Việt فارسی עברית 什么是正则表达式? 正则表达式是一组由字母和符号组成的特殊文本,它可以用来从文本中找出满足你想要的格式的句子。
Read more
March 31, 2022

Hello World

Theme Quick Start / Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub. / Quick Start Create a new post 1 $ hexo new "My New Post" More info: Writing / Run server 1 $ hexo server More info: Server / Generate static files 1 $ hexo generate More info: Generating / Deploy to remote sites 1 $ hexo deploy More info: Deployment
Read more