【C语言习题】12.扫雷游戏

文章目录

    • 1.扫雷游戏分析和设计
      • 1.1 扫雷游戏的功能说明
      • 1.2游戏界面:
      • 1.3游戏的分析和设计
        • 1.2.1 数据结构的分析
        • 1.2.2 ⽂件结构设计
    • 2.扫雷游戏的代码实现
    • 3.代码讲解


1.扫雷游戏分析和设计

1.1 扫雷游戏的功能说明

  • 使用控制台实现经典的扫雷游戏
  • 游戏可以通过菜单实现继续玩或者退出游戏
  • 扫雷的棋盘是9*9的格子
  • 默认随机布置10个雷
  • 可以排查雷
    • 如果位置不是雷,就显示周围有几个雷
    • 如果位置是雷,就炸死游戏结束
    • 把除10个雷之外的所有非雷都找出来,排雷成功,游戏结束

1.2游戏界面:

在这里插入图片描述在这里插入图片描述
初始界面排雷界面
在这里插入图片描述在这里插入图片描述
排雷失败界面排雷成功界面

为了方便演示,我把排雷成功的设置成了2x2的,方便成功。


1.3游戏的分析和设计

1.2.1 数据结构的分析

我们先看一下扫雷的图片:

在这里插入图片描述在这里插入图片描述

这一个个框框看着很像数组,事实上我们可以用数组来存放扫雷游戏需要的数据。

  • 点击前:全是*

  • 点击后:有雷,我们就存放1,没有雷就存放0。

如果我们没有被雷炸到,那么我们点击的地方会显示周围有几个雷。

在这里插入图片描述在这里插入图片描述

上面的表格里面,一开始我们不知道里面有啥,然后点了最中间的那个。

然后就出现了1(因为点击的周围有一个雷)。图2里面的雷和无雷是为了方便理解写出来的。

在这里插入图片描述

如果我们在[1][1]处点击,那么就要统计[0][0],[0][1],[0][2],[1][0],[1][2],[2][0],[2][1],[2][2]这8个地方一共有几个雷。

可如果在[2][2]这个地方点击呢?只要统计3个地方了。

难道我们要分多钟情况去考虑吗?

当然不是,我们可以建造一个比实际需要的扫雷数组大一圈的数组。

在这里插入图片描述

例如我们只需要中间的3X3的数组用作扫雷游戏,那么我们可以准备一个5X5的数组,这样每个扫雷游戏的区域都可以采用一样的方法来统计周围有几个雷了。

同样的,我们要准备两个结构一样的数组,一个用来存放雷和非雷的数据,另一个用来显示。

可以理解为一个是前端,一个是后端。

  • 然后我们让雷是1,非雷是0(后端)

  • 未知的地方放*,已知的地方显示周围雷的数字(前端)

1.2.2 ⽂件结构设计

因为工程有点大,我们可以用3个文件来完成这个游戏。

test.c //文件中写游戏的测试逻辑 
game.c //文件中写游戏中函数的实现等
game.h //文件中写游戏需要的数据类型和函数声明等

2.扫雷游戏的代码实现

game.h

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <time.h>
#include <stdlib.h>#define ROW 9
#define COL 9#define ROWS ROW+2
#define COLS COL+2#define EASY_COUNT 10//初始化棋盘
void InitBoard(char board[ROWS][COLS], int rows, int cols, char set);
//打印棋盘
void DisplayBoard(char board[ROWS][COLS], int row, int col);
//布置雷
void SetMine(char board[ROWS][COLS], int row, int col);
//排查雷
void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);

game.c

#define _CRT_SECURE_NO_WARNINGS 1
#include "game.h"//初始化棋盘
void InitBoard(char board[ROWS][COLS], int rows, int cols, char set) {int i = 0;int j = 0;for (i = 0; i < rows; i++) {for (j = 0; j < cols; j++) {board[i][j] = set;}}
}
//打印棋盘
void DisplayBoard(char board[ROWS][COLS], int row, int col) {int i = 0;int j = 0;printf("-----------------扫雷游戏-----------------\n");for (j = 0; j <= col; j++) {printf("%d ", j);}printf("\n");for (i = 1; i <= row; i++) {printf("%d ", i);for (j = 1; j <= col; j++) {printf("%c ", board[i][j]);}printf("\n");}printf("-----------------扫雷游戏-----------------\n");
}//布置雷
void SetMine(char board[ROWS][COLS], int row, int col) {//布置10个雷//生成随机的坐标,布置雷int count = EASY_COUNT;//横坐标:1-9;纵坐标:1-9while (count) {int  x = rand() % row + 1;int  y = rand() % col + 1;if (board[x][y] == '0') {board[x][y] = '1';count--;}}
}
//计算指定位置附近雷的个数
int get_mine_count(char board[ROWS][COLS], int x, int y) {return (board[x - 1][y] +board[x - 1][y - 1] +board[x][y - 1] +board[x + 1][y - 1] +board[x + 1][y] +board[x + 1][y + 1] +board[x][y + 1] +board[x - 1][y + 1] - 8 * '0');//8个坐标的值要么是'0'要么是'1',加起来后减去8个'0'就可以得到他们的和了,也就是有几个雷
}
//排查雷
void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col) {int x = 0;int y = 0;int win = 0;//找到非雷的个数while (win < row * col - EASY_COUNT) {printf("请输入要排查的坐标:>");scanf("%d%d", &x, &y);if (x >= 1 && x <= row && y >= 1 && y <= col) {if (show[x][y] != '*') {printf("该坐标被排查过了,不能重复排查\n");}else {//如果是雷if (mine[x][y] == '1') {printf("很遗憾,你被炸死了\n");DisplayBoard(mine, ROW, COL);break;}//如果不是雷else {win++;//统计mine数组中x,y坐标周围有几个雷int count = get_mine_count(mine, x, y);show[x][y] = count + '0';//转换成  数字字符DisplayBoard(show, ROW, COL);}}}else {printf("输入坐标非法,请重新输入\n");}}if (win == row * col - EASY_COUNT) {printf("恭喜你,排雷成功\n");DisplayBoard(mine, ROW, COL);}
}

test.c

#define _CRT_SECURE_NO_WARNINGS 1
#include "game.h"void menu() {printf("************************************\n");printf("********  1. play  0. exit  ********\n");printf("************************************\n");
}void game() {char mine[ROWS][COLS] = { 0 };//存放布置好的雷的信息char show[ROWS][COLS] = { 0 };//存放排查出的雷的信息//初始化内容为指定的内容//mine 数组在没有布置雷的时候,都是‘0’InitBoard(mine, ROWS, COLS, '0');//show 数组在没有排查雷的时候,都是‘*’InitBoard(show, ROWS, COLS, '*');//设置雷SetMine(mine, ROW, COL);//DisplayBoard(mine, ROW, COL);DisplayBoard(show, ROW, COL);//排查雷FindMine(mine, show, ROW, COL);
}int main() {int input = 0;//设置随机数的生成起点srand((unsigned int)time(NULL));do {menu();printf("请选择:>");scanf("%d", &input);switch (input) {case 1:game();break;case 0:printf("退出游戏\n");break;default:printf("选择错误\n");break;}} while (input);return 0;
}

3.代码讲解

  1. 我们先找main()函数,在test.c文件里。

  2. int input = 0;这个定义了变量input用来让我们确认自己是玩游戏还是退出游戏。

  3. srand((unsigned int)time(NULL));这个是为了给rand 函数设定随机数种子。关于rand函数的详细解释在我之前发布的2.猜数字游戏这个文档里有详细解释,这里就不多赘述了。

    time()函数需要用到#include <time.h>这个头文件。
    rand函数的使用需要包含#include <stdlib.h>这个头文件。

  4. 接下来进入do while循环,先进入menu()函数【这个函数在test.c里面】,打印

    ************************************
    ********  1. play  0. exit  ********
    ************************************
    
  5. 然后进入【test.c】35行,printf("请选择:>");打印:请选择:>

  6. 进入【test.c】36,输入选择,根据不同选择进入switch语句里的case 1,case 0,default

  7. 进入case 0就打印退出游戏,然后退出游戏

  8. 进入default就打印选择错误,然后跳出switch语句,进入while的判断。因为input为0的时候才跳出循环,所以这里会继续进入循环。

  9. 进入case 1就进入game()函数【这个函数在test.c里面】

  10. 进入【test.c】11行char mine[ROWS][COLS] = { 0 };存放布置好的雷的信息(我们表面上看不到的后台的数据)

  11. 进入【test.c】12行char show[ROWS][COLS] = { 0 };存放排查出的雷的信息(我们看到的部分,前台的图案)

  12. 然后初始化内容为指定的内容,进入【test.c】15行 InitBoard(mine, ROWS, COLS, '0');设置mine 数组(后台)在没有布置雷的时候,都是‘0’

  13. 这个InitBoard()函数在【game.c】里面第5行,用来初始化棋盘。

    void InitBoard(char board[ROWS][COLS], int rows, int cols, char set) {int i = 0;int j = 0;for (i = 0; i < rows; i++) {for (j = 0; j < cols; j++) {board[i][j] = set;}}
    }
    

    这里第4个参数设置成了char set,设置的很完美,这样不管是想在里面放'*'还是'0'都可以完成,而不需要设置两个结构一样的函数。

  14. 进入【test.c】17行InitBoard(show, ROWS, COLS, '*');设置show 数组(前台)在没有排查雷的时候,都是‘*’

  15. 进入【test.c】20行 SetMine(mine, ROW, COL);用来设置雷

  16. 这个SetMine()函数在【game.c】里面第35行,用来布置雷

    //布置雷
    void SetMine(char board[ROWS][COLS], int row, int col) {//布置10个雷//生成随机的坐标,布置雷int count = EASY_COUNT;//横坐标:1-9;纵坐标:1-9while (count) {int  x = rand() % row + 1;int  y = rand() % col + 1;if (board[x][y] == '0') {board[x][y] = '1';count--;}}
    }
    

    因为实参是mine(mine 数组(后台)),所以这里设置的雷是给后台设置的。

  17. 进入int count = EASY_COUNT;,定义了一个变量count,这个count赋值为EASY_COUNT,EASY_COUNT在【game.h】里面第12行

    #define EASY_COUNT 10
    

    相当于一个宏定义,定义EASY_COUNT就是10。这么做有个好处,就是如果想要更改雷的数量直接更改宏定义里面的10就可以了,否则的话,我们要去定义变量的地方更改,变量多了就容易分不清。

  18. 这里是定义了有10个雷,因为count=10,【之前的宏定义里面EASY_COUNT就是10】

  19. 然后进入while循环,进入第10行,int x = rand() % row + 1;这个是给x一个1-9的随机数【x是数组横坐标】。

    为什么rand() % row + 1是1-9的随机数?

    之前在我之前发布的2.猜数字游戏这个文档里有详细解释,我取关键的一段结论出来:

    如果我们想要生成a~b的随机数,

    a + rand()%(b-a+1)
    

    这就得到了,a~b的值。

    这里面1-9就相当于:

    1 + rand()%(9-1+1)
    

    化简一下就是:

    1 + rand()%(9)
    

    前面【game.h】文件里还有四个宏定义

    #define ROW 9//代表扫雷行号9行
    #define COL 9//代表扫雷列号9列#define ROWS ROW+2//代表11行
    #define COLS COL+2//代表11列
    

    这里的ROWSCOLS是前面说过的建造一个比实际需要的扫雷数组大一圈的数组,来避免分类讨论带来的复杂情况,所以加2,大了一圈。

    让我们回到int x = rand() % row + 1;这个row是形参,形参是由实参传递过来的。它对应的实参是ROW,也就是9。

    所以符合上面化简得结果。

  20. 和上一条类似,int y = rand() % col + 1;这个是给y一个1-9的随机数【y是数组纵坐标】。

  21. 然后:

    if (board[x][y] == '0') {board[x][y] = '1';count--;
    }
    

    是一个简单的判断条件:如果我们生成随机数的地方是0(也就是没雷),那么就把0改成1。同时雷的个数就减1。然后重新进入while循环。

    如果我们生成随机数的地方是1(也就是有雷),那么就不执行这个if语句,然后重新进入while循环。

  22. 然后让我们回到【test.c】文件的第23行,DisplayBoard(show, ROW, COL);这个会让我们进入【game.c】文件的15行,为了方便看,我把代码拿下来

    //打印棋盘
    void DisplayBoard(char board[ROWS][COLS], int row, int col) {int i = 0;int j = 0;printf("-----------------扫雷游戏-----------------\n");for (j = 0; j <= col; j++) {printf("%d ", j);}printf("\n");for (i = 1; i <= row; i++) {printf("%d ", i);for (j = 1; j <= col; j++) {printf("%c ", board[i][j]);}printf("\n");}printf("-----------------扫雷游戏-----------------\n");
    }
    

    show 数组(前台),show作为实参,将show数组传递给了board数组。

  23. 先定义前台数组的行号i和列号j。然后打印-----------------扫雷游戏-----------------

    在这里插入图片描述

    这个行号就是我花红色方框的那行,列号是蓝色方框那列。

  24. 进入第一个for循环打印行号0-9,然后回车。

  25. 进入第二个for循环先打印列号1然后进入内嵌的for循环,将列号为1 的那行全打印*,然后进入外面那个for循环打印列号2然后进入内嵌的for循环,依此类推。

  26. 最后打印:-----------------扫雷游戏-----------------

  27. DisplayBoard(show, ROW, COL);函数结束,进入FindMine(mine, show, ROW, COL);来排查雷。

  28. 这个会让我们进入【game.c】文件的65行,为了方便看,我把代码拿下来:

    //排查雷
    void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col) {int x = 0;int y = 0;int win = 0;//找到非雷的个数while (win < row * col - EASY_COUNT) {printf("请输入要排查的坐标:>");scanf("%d%d", &x, &y);if (x >= 1 && x <= row && y >= 1 && y <= col) {if (show[x][y] != '*') {printf("该坐标被排查过了,不能重复排查\n");}else {//如果是雷if (mine[x][y] == '1') {printf("很遗憾,你被炸死了\n");DisplayBoard(mine, ROW, COL);break;}//如果不是雷else {win++;//统计mine数组中x,y坐标周围有几个雷int count = get_mine_count(mine, x, y);show[x][y] = count + '0';//转换成  数字字符DisplayBoard(show, ROW, COL);}}}else {printf("输入坐标非法,请重新输入\n");}}if (win == row * col - EASY_COUNT) {printf("恭喜你,排雷成功\n");DisplayBoard(mine, ROW, COL);}
    }
    

    show 数组(前台),mine 数组(后台)

  29. .先定义了数组横坐标x和纵坐标y,初始化为0。然后定义win为找到非雷的个数。

  30. 进入while循环,如果win < row * col - EASY_COUNT那么循环继续,也就是说只要玩家排查的非雷格子数量小于需要排查的总数,游戏的主循环就会继续运行。在这个循环中,玩家输入坐标来排查雷,如果排查到雷,游戏结束;如果排查到非雷格子, win 的值会增加,并且游戏会继续。

    如果运气非常好,把所有雷都排除了,并且把其他非雷的地方也全选了,那么就会让win = row * col - EASY_COUNT从而跳出while循环,执行下面的:

    if (win == row * col - EASY_COUNT) {printf("恭喜你,排雷成功\n");DisplayBoard(mine, ROW, COL);
    }
    

    打印:恭喜你,排雷成功,然后调用DisplayBoard(mine, ROW, COL);,将输入结果打印。

  31. 在没有把雷排完前会先在循环里,先打印:请输入要排查的坐标:>,然后输入自己选择的坐标,

    if (x >= 1 && x <= row && y >= 1 && y <= col)这个是为了确认自己输入的坐标没有越界。

    然后进入内层判断,如果输入的坐标处已经不是*了,也就是之前这个坐标输入过了,就打印:该坐标被排查过了,不能重复排查

    否则就进入else,然后进入内部的if,

    //如果是雷
    if (mine[x][y] == '1') {printf("很遗憾,你被炸死了\n");DisplayBoard(mine, ROW, COL);break;
    }
    

    如果输入的地方在mine数组(也就是后台)里面放的是1(地雷),就会输入:很遗憾,你被炸死了

    如果没被炸死就进入else,

    //如果不是雷
    else {win++;//统计mine数组中x,y坐标周围有几个雷int count = get_mine_count(mine, x, y);show[x][y] = count + '0';//转换成  数字字符DisplayBoard(show, ROW, COL);
    }
    

    先给win加1,然后定义count来接受来自get_mine_count(mine, x, y);这个函数的返回值。

    这个函数在【game.c】文件的第53行,为了方便看,我把代码拿下来:

    //计算指定位置附近雷的个数
    int get_mine_count(char board[ROWS][COLS], int x, int y) {return (board[x - 1][y] +board[x - 1][y - 1] +board[x][y - 1] +board[x + 1][y - 1] +board[x + 1][y] +board[x + 1][y + 1] +board[x][y + 1] +board[x - 1][y + 1] - 8 * '0');//8个坐标的值要么是'0'要么是'1',加起来后减去8个'0'就可以得到他们的和了,也就是有几个雷
    }
    

    返回的值是我们输入数组坐标的身旁8个位置的字符减去8个'0'

    因为'0'-'0'=0'1'-'0'=1,8个位置依次完成这个操作就相当于8个位置加起来减去8个'0',得到的返回值就是输入坐标周围的雷的个数的值。

  32. 我们把这个值给count,然后把count的值加上'0',就可以得到输入坐标周围的雷的个数的字符。(注意上面是值,这边是字符)

  33. 然后用这个字符来替换数组输入位置原来的符号。

  34. 最后打印:DisplayBoard(show, ROW, COL);,将输入结果打印。

  35. 直到被炸死或者排雷成功游戏才会结束。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/838306.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Web浏览器的兼容性测试需要考虑哪些测试点?

测试web网站兼容性时&#xff0c;可以使用各种测试用例来确保网站在不同浏览器中的良好兼容性。以下是一些常见的兼容性测试用例示例&#xff1a; 1. 页面加载测试&#xff1a; - 确保网站在不同浏览器中正常加载&#xff0c;没有加载错误。 - 检查页面加载时间&#xff0c;…

创新指南 | 企业AI战略 实施方案探讨(上):如何构建基于AI的新商业模型和业务场景

2023年以ChatGPT为代表的生成式AI推出以来&#xff0c;从投资界到企业界都掀起了一股热潮。那么从企业角度来看&#xff0c;生成式AI到底能为业务带来哪些增量呢&#xff1f;企业如何构建基于AI的商业模式并进行落地实施呢&#xff1f; 企业AI战略 实施方案探讨分为上下两篇&am…

二手手机行业商家如何利用二手机店erp进行破局?

在数字化和AI发展越发先进的的今天&#xff0c;二手手机市场正迎来前所未有的变革。途渡科技精心打造的超机购ERP管理软件&#xff0c;凭借其独特的智能化、高效化特点&#xff0c;正在引领这场变革&#xff0c;为二手手机商家提供全面、深度的数字化管理解决方案。二手手机商家…

前端之电力系统SVG图低代码

其实所有的图形都是由点&#xff0c;线&#xff0c;面组成的。点线面可以组成一个设备。下面就简单讲讲点线面是怎么画的吧 对于线&#xff0c;可以用path <g><path:d"M ${beginX},${beginY} L ${endX},${endY}":stroke-width"lineWidth":strok…

【漏洞复现】Secnet-智能路由系统弱口令

0x01 产品简介 Secnet安网智能AC管理系统是广州安网通信技术有限公司(简称“安网通信”)的无线AP管理系统 0x02 漏洞描述 攻击者可直接利用弱口令登录系统 0x03 搜索语法 fofa: title"安网-智能路由系统" || title"智能路由系统" || title"安网科…

鸿蒙应用布局ArkUI【基础运用案例】

布局基础运用案例 平级导航的复合网格视图 平级导航的复合网格视图常出现在同时展示多种不同内容的界面。 例如&#xff0c;市场类应用作为典型的平级导航&#xff0c;其首页不同板块采用了不同布局能力。 标题栏与搜索栏&#xff1a;因元素单一、位置固定在顶部&#xff0c…

打造销售爆款利器!淘宝商品评论电商API接口全方位解析

无论是实体店还是电商平台&#xff0c;通过有效的销售推广手段&#xff0c;提升产品销量都是商家追求的目标。而淘宝商品评论电商API接口就是一种非常有效的工具&#xff0c;它能够帮助商家获取、分析并利用商品评论信息&#xff0c;为销售策略提供有力支持。联讯数据将全面解析…

第33次CSP认证Q3:化学方程式配平

&#x1f344;题目描述 为了配平一个化学方程式&#xff0c;我们可以令方程式中各物质的系数为未知数&#xff0c;然后针对涉及的每一种元素&#xff0c;列出关于系数的方程&#xff0c;形成一个齐次线性方程组。然后求解这个方程组&#xff0c;得到各物质的系数。这样&#x…

MySQL---JSON的用法讲解

一、概述 1.1MySQL的JSON概述 JSON 数据类型是 MySQL 5.7.8 开始支持的。在此之前&#xff0c;只能通过字符类型&#xff08;CHAR&#xff0c;VARCHAR 或 TEXT &#xff09;来保存 JSON 文档。 MySQL 8.0版本中增加了对JSON类型的索引支持。可以使用CREATE INDEX语句创建JSO…

百度百舸 AIAK-LLM 的大模型训练和推理加速实践

本文整理自 4 月 16 日的 2024 百度 Create 大会的公开课分享《百舸 AIAK-LLM&#xff1a;大模型训练和推理加速实践》。 今天要分享的主题是 AI Infra 相关的内容&#xff0c;主要内容分为四部分。 首先和大家一起讨论大模型给基础设施带来的挑战。第二部分则是向大家介绍一个…

[蓝桥杯 2021 国 ABC] 123(java)——前缀和,思维

目录 题目 解析 代码 这么久了&#xff0c;我终于能不看别人代码完整写出来了&#xff0c;呜呜呜。虽然过程也是很曲折。 题目 解析 这个题&#xff0c;找其中数列的规律&#xff0c;1,1,2,1,2,3,1,2,3,4&#xff0c;...&#xff0c;因此我们把拆分成行列&#xff0c;如下…

MT3036 第一节离数课后

思路&#xff1a; 这道题与之前的表达式求值题目不同的是&#xff0c;有not这个单目运算符。而且如果表达式错误&#xff0c;要输入error。 把true和false成为操作数&#xff0c;把and or not成为运算符。 考虑error的情况&#xff1a; 1.and 和 or是双目运算符&#xff0c…

小程序蓝牙连接ESP32通信(可直接拿来用)

小程序中的蓝牙能力 在小程序中&#xff0c;要使用蓝牙能力&#xff08;Beacon 除外&#xff09;必须首先调用 wx.openBluetoothAdapter 初始化蓝牙适配器模块&#xff0c;其生效周期为调用 wx.openBluetoothAdapter 至调用 wx.closeBluetoothAdapter 或小程序被销毁为止。只有…

评价决策类-层次分析法

师从江北 问题引出 归一化处理&#xff1a;指标的数组[a b c]归一化处理得到[a/(abc),b/(abc),c/(abc)] 因为每个指标的重要性不同&#xff0c;所以要加上一个权重 如何科学的确定权重&#xff0c;就要用到层次分析法&#xff08;AHP&#xff09; 模型原理 建立递阶层次结构模…

VMware17虚拟机安装Kali Linux2024详解

目录 简介 一、环境搭建 二、下载ISO镜像 三、新建虚拟机 为虚拟机选择合适的操作系统类型和版本 分配适当的内存、硬盘空间和其他虚拟机配置选项 四、硬件配置 编辑虚拟机设置 选择安装介质 五、界面化安装配置 简介 Kali Linux是一个基于Debian的Linux发行版&#…

【记录】docker笔记(五):Docker网络-Network Namespace

Docker 网络理论基础 要了解docker网络&#xff0c;先了解如下基础概念。 Network Namespace Docker 网络的底层原理是 Linux 的 Network Namespace &#xff0c;所以对于 Linux Network Namespace 的理解对 Docker 网络底层原理的理解非常重要。 简介 Network Name…

【董晓算法】动态规划之线性DP问题

前言&#xff1a; 本系列是看的B站董晓老师所讲的知识点做的笔记 董晓算法的个人空间-董晓算法个人主页-哔哩哔哩视频 (bilibili.com) 树塔-记忆化搜索 特点&#xff08;前提&#xff09;&#xff1a;从上向下的累加和是不能重复使用的&#xff0c;从下向上的累加和是可以重…

C++进阶:哈希(2)位图与布隆过滤器

目录 1. 位图&#xff08;bitset&#xff09;1.1 引子&#xff1a;海量整形数据的处理1.2 结构描述1.3 位图实现1.4 位图相关题目练习 2. 布隆过滤器&#xff08;BloomFilter&#xff09;2.1 引子&#xff1a;海量非int类型数据处理&#xff08;string&#xff09;2.2 结构描述…

文心一言 VS 讯飞星火 VS chatgpt (252)-- 算法导论18.2 5题

五、因为叶结点无需指向孩子结点的指针&#xff0c;那么对同样大小的磁盘页面&#xff0c;可选用一个与内部结点不同的(更大的) t 值。请说明如何修改 B 树的创建和插人过程来处理这个变化。如果要写代码&#xff0c;请用go语言。 文心一言&#xff1a; 当我们在B树&#xff…

搭载全新升级viaim AI,讯飞会议耳机Pro 2首销价1399元起

2024年5月15日&#xff0c;人工智能硬件公司未来智能发布了讯飞会议耳机Pro 2、iFLYBUDS 2以及Kit 2三款旗舰新品&#xff0c;为用户带来全新升级的viaim AI&#xff0c;也为AIGC智能耳机树立了新标杆。 在发布会上&#xff0c;未来智能CEO马啸表示&#xff1a;在AIGC领域&…