c++井字棋(单人对电脑:1.电脑随机下 2.电脑AI;3.双人对决)
本游戏分两个模式,三种玩法:
每个玩法中的人下棋规则不变,如下:
while (1) {/*输入*/int row,col;cout<<"请输入坐标(1索引):\n";cin>>row>>col;/*切换索引*/row--;col--;if(legal(row,col)) {printf("您的坐标不在合法范围内[1,3],请重新输入:\n");continue;}if (T[row][col]!=' ') {printf("您想下的位置已经有棋子了!\n");continue;}/*下*/T[row][col]='x';break;
}
第一种模式:单人对电脑模式
这种模式适合一个人玩,对手为电脑,但是分两种难度,并且加上了胜利系统:第一种难度为普通难度,对手为电脑随机生成;第二种难度为地狱难度,对手为AI,接下来将详细介绍:
第一种玩法:单人对电脑随机下
此玩法的电脑将以以下方式下棋:
while(1) {int row=rand()%Max_N;/*MAX_N的值为3,为棋盘的范围*/int col=rand()%Max_M;/*MAX_M的值为3,为棋盘的范围*//*已经下过了*/if (T[row][col]!=' ') {continue;}/*下*/T[row][col]='o';break;
}
第二种玩法:单人对电脑AI下
此玩法的电脑将以以下方式下棋且用到了一种策略(能赢就不堵):
/*判断行是否赢*/for(int i=0; i<Max_N; i++) {if(T[i][0]=='o'&&T[i][1]=='o'&&T[i][2]!='x') {T[i][2]='o';return ;} else if(T[i][1]=='o'&&T[i][2]=='o'&&T[i][0]!='x') {T[i][0]='o';return ;} else if(T[i][0]=='o'&&T[i][2]=='o'&&T[i][1]!='x') {T[i][1]='o';return ;}}/*判断列是否赢*/for(int i=0; i<Max_M; i++) {if(T[0][i]=='o'&&T[1][i]=='o'&&T[2][i]!='x') {T[2][i]='o';return ;} else if(T[1][i]=='o'&&T[2][i]=='o'&&T[0][i]!='x') {T[0][i]='o';return ;} else if(T[0][i]=='o'&&T[2][i]=='o'&&T[1][i]!='x') {T[1][i]='o';return ;}}/*判断斜是否赢*/if(T[0][0]=='o'&&T[1][1]=='o'&&T[2][2]!='x') {T[2][2]='o';return ;} else if(T[1][1]=='o'&&T[2][2]=='o'&&T[0][0]!='x') {T[0][0]='o';return ;} else if(T[0][0]=='o'&&T[2][2]=='o'&&T[1][1]!='x') {T[1][1]='o';return ;}/*判断行是否输*/for(int i=0; i<Max_N; i++) {if(T[i][0]=='x'&&T[i][1]=='x'&&T[i][2]!='o') {T[i][2]='o';return ;} else if(T[i][1]=='x'&&T[i][2]=='x'&&T[i][0]!='o') {T[i][0]='o';return ;} else if(T[i][0]=='x'&&T[i][2]=='x'&&T[i][1]!='o') {T[i][1]='o';return ;}}/*判断列是否输*/for(int i=0; i<Max_M; i++) {if(T[0][i]=='x'&&T[1][i]=='x'&&T[2][i]!='o') {T[2][i]='o';return ;} else if(T[1][i]=='x'&&T[2][i]=='x'&&T[0][i]!='o') {T[0][i]='o';return ;} else if(T[0][i]=='x'&&T[2][i]=='x'&&T[1][i]!='o') {T[1][i]='o';return ;}}/*判断斜是否输*/if(T[0][0]=='x'&&T[1][1]=='x'&&T[2][2]!='o') {T[2][2]='o';return ;} else if(T[1][1]=='x'&&T[2][2]=='x'&&T[0][0]!='o') {T[0][0]='o';return ;} else if(T[0][0]=='x'&&T[2][2]=='x'&&T[1][1]!='o') {T[1][1]='o';return ;}
第二种模式:双人对决模式
第三种玩法:人对人下
顾名思义,两个相同代码就行了
接下来,上代码!
作者写了357行,求关注收藏,非喜勿喷,有任何问题请联系作者,一定改正。
#include<bits/stdc++.h>
#include<ctime>
#include<cstdlib>
#include<unistd.h>
#include <windows.h>
using namespace std;
#define Max_N 3
#define Max_M 3
/*总局数,赢得局数,平局的局数*/
int sum,Win,P;
bool easy=1,Double=1;
/*初始化棋盘*/
void init(char T[Max_N][Max_M]) {for(int row=0; row<Max_N; row++) {for(int col=0; col<Max_M; col++) {T[row][col]=' ';}}return ;
}
/*输出棋盘*/
void print_T(char T[Max_N][Max_M]) {if(Double) {cout<<"温馨提示:o为玩家1所下,x为玩家2所下\n";} else {cout<<"温馨提示:o为你所下,x为电脑所下\n";}cout<<"+---+---+---+\n";for (int i=0; i<Max_N; i++) {cout<<"| "<<T[i][0]<<" | "<<T[i][1]<<" | "<<T[i][2]<<" |\n+---+---+---+\n";}return ;
}
/*判断下棋位置是否合法*/
bool legal(int i,int j) {return i<0||i>=Max_N||j<0||j>=Max_M;
}
/*下棋*/
void chess(char T[Max_N][Max_M]) {while (1) {/*输入*/int row,col;cout<<"请玩家1输入坐标(1索引):\n";cin>>row>>col;/*切换索引*/row--;col--;if(legal(row,col)) {printf("您的坐标不在合法范围内[1,3],请重新输入:\n");continue;}if (T[row][col]!=' ') {printf("您想下的位置已经有棋子了!\n");continue;}/*下*/T[row][col]='x';break;}return ;
}
/*双人对手下棋*/
void chess2(char T[Max_N][Max_M]) {while (1) {/*输入*/int row,col;cout<<"请玩家2输入坐标(1索引):\n";cin>>row>>col;if(legal(row-1,col-1)) {printf("您的坐标不在合法范围内[1,3],请重新输入:\n");continue;}if (T[row-1][col-1]!=' ') {printf("您想下的位置已经有棋子了!\n");continue;}/*下*/T[row-1][col-1]='o';break;}return ;
}
/*电脑下(AI)*/
void computerchess(char T[Max_N][Max_M]) {/*这里用到了一种策略,就是如果赢了就一定不堵*//*表格*/
// 0 1 2
// 0 1 1 1
// 1 1 1 1
// 2 1 1 1if(easy) {/*判断行是否赢*/for(int i=0; i<Max_N; i++) {if(T[i][0]=='o'&&T[i][1]=='o'&&T[i][2]!='x') {T[i][2]='o';return ;} else if(T[i][1]=='o'&&T[i][2]=='o'&&T[i][0]!='x') {T[i][0]='o';return ;} else if(T[i][0]=='o'&&T[i][2]=='o'&&T[i][1]!='x') {T[i][1]='o';return ;}}/*判断列是否赢*/for(int i=0; i<Max_M; i++) {if(T[0][i]=='o'&&T[1][i]=='o'&&T[2][i]!='x') {T[2][i]='o';return ;} else if(T[1][i]=='o'&&T[2][i]=='o'&&T[0][i]!='x') {T[0][i]='o';return ;} else if(T[0][i]=='o'&&T[2][i]=='o'&&T[1][i]!='x') {T[1][i]='o';return ;}}/*判断斜是否赢*/if(T[0][0]=='o'&&T[1][1]=='o'&&T[2][2]!='x') {T[2][2]='o';return ;} else if(T[1][1]=='o'&&T[2][2]=='o'&&T[0][0]!='x') {T[0][0]='o';return ;} else if(T[0][0]=='o'&&T[2][2]=='o'&&T[1][1]!='x') {T[1][1]='o';return ;}/*判断行是否输*/for(int i=0; i<Max_N; i++) {if(T[i][0]=='x'&&T[i][1]=='x'&&T[i][2]!='o') {T[i][2]='o';return ;} else if(T[i][1]=='x'&&T[i][2]=='x'&&T[i][0]!='o') {T[i][0]='o';return ;} else if(T[i][0]=='x'&&T[i][2]=='x'&&T[i][1]!='o') {T[i][1]='o';return ;}}/*判断列是否输*/for(int i=0; i<Max_M; i++) {if(T[0][i]=='x'&&T[1][i]=='x'&&T[2][i]!='o') {T[2][i]='o';return ;} else if(T[1][i]=='x'&&T[2][i]=='x'&&T[0][i]!='o') {T[0][i]='o';return ;} else if(T[0][i]=='x'&&T[2][i]=='x'&&T[1][i]!='o') {T[1][i]='o';return ;}}/*判断斜是否输*/if(T[0][0]=='x'&&T[1][1]=='x'&&T[2][2]!='o') {T[2][2]='o';return ;} else if(T[1][1]=='x'&&T[2][2]=='x'&&T[0][0]!='o') {T[0][0]='o';return ;} else if(T[0][0]=='x'&&T[2][2]=='x'&&T[1][1]!='o') {T[1][1]='o';return ;}}/*否则随意下*/while(1) {int row=rand()%Max_N;int col=rand()%Max_M;/*已经下过了*/if (T[row][col]!=' ') {continue;}/*下*/T[row][col]='o';break;}return ;
}
/*判断是否满*/
int Is_Empty(char T[Max_N][Max_M]) {for(int row=0; row<Max_N; row++) {for(int col=0; col<Max_M; col++) {if (T[row][col]==' ') {return 0;}}}return 1;
}
/*是否胜利*/
char isWin(char T[Max_N][Max_M]) {/*行*/for (int i=0; i<Max_N; i++) {if (T[i][0]!=' '&&T[i][0]==T[i][1]&&T[i][0]==T[i][2]) {return T[i][0];}}/*列*/for(int j=0; j<Max_M; j++) {if (T[0][j]!=' '&&T[0][j]==T[1][j]&&T[0][j]==T[2][j]) {return T[0][j];}}if (T[0][0]!=' '&&T[0][0]==T[1][1]&&T[0][0]==T[2][2]) {return T[0][0];}if (T[2][0]!=' '&&T[2][0]==T[1][1]&&T[2][0]==T[0][2]) {return T[2][0];}/*满,返回错误信息*/if (Is_Empty(T)) {return 'q';}/*否则没有胜利,返回空格*/return ' ';
}
/*游戏*/
void game() {cout<<"请选择模式(0为单人模式,对手为电脑;1为双人模式)\n";cin>>Double;if(!Double) {cout<<"现在一共下了"<<sum<<"盘\n";cout<<"其中:\n";cout<<"您一共赢了:"<<Win<<"盘\n";cout<<"您一共平局了:"<<P<<"盘\n";cout<<"您一共输了:"<<sum-Win-P<<"盘\n";double wwin=Win*100*1.0/sum,PP=P*100*1.0/sum,SS=(sum-Win-P)*100*1.0/sum;cout<<"您的获胜率为:"<<fixed<<setprecision(5)<<(sum==0?0:wwin)<<"%\n";cout<<"您的平局率为:"<<fixed<<setprecision(5)<<(sum==0?0:PP)<<"%\n";cout<<"您的失败率为:"<<fixed<<setprecision(5)<<(sum==0?0:SS)<<"%\n";cout<<"请选择难度(0为普通难度,对手为电脑随机生成;1为地狱难度,对手为AI)\n";cin>>easy;}char T[Max_N][Max_M]= { 0 };init(T);char winner=' ';while(1) {system("cls");print_T(T);/*人下*/chess(T);winner=isWin(T);/*有特殊情况(棋盘满或有一方已经胜利)*/if (winner!=' ') {break;}system("cls");print_T(T);/*电脑或第二人下*/if(Double) {chess2(T);} else {computerchess(T);}winner=isWin(T);/*有特殊情况(棋盘满或有一方已经胜利)*/if(winner!=' ') {break;}continue;}system("cls");print_T(T);sum++;if (winner == 'x') {Win++;if(Double) {cout<<"恭喜玩家1, 您赢了!\n";cout<<"玩家2连玩家1都打不过,菜!\n";} else {cout<<"恭喜您,您赢了!\n";}if(!easy&&!Double) {cout<<"有本事切换地狱难度!\n";}} else if (winner == 'o') {if(easy) {if(Double) {cout<<"恭喜玩家2, 您赢了!\n";cout<<"玩家1连玩家2都打不过,菜!\n";} else {cout<<"太菜了,连人工智障都下不过!\n";}} else {cout<<"太菜了,连随机都下不过!\n";}} else {P++;if(easy) {if(Double) {cout<<"哈哈,玩家1只能和玩家2打平手!\n";cout<<"哈哈,玩家2只能和玩家1打平手!!n";}cout<<"哈哈,你只能和人工智障打平手!\n";} else {cout<<"哈哈,你只能和随机打平手!\n";}}Sleep(5000);system("cls");
}
/*菜单*/
int menu() {cout<<"--------------------------\n";cout<<"--------1.开始游戏--------\n";cout<<"--------0.退出游戏--------\n";cout<<"--------------------------\n";int choice=0;cout<<"请输入你的选择:";cin>>choice;return choice;
}
void _Sleep() {cout<<"程序正在加载中\n";system("cls");cout<<"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n 加载进度:";for(int i=1; i<=100;) {/*让数随机*/srand(time(NULL));/*更新值,等待*/Sleep(100+rand()%(50-1+1));i+=(1+rand()%(10));/*判断开始*/if(i>=100) {cout<<"开始!";Sleep(2000);system("cls");break;}/*输出现在加载情况*/cout<<i<<"%\n";system("cls");cout<<"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n 加载进度:";}system("cls");return ;
}
/*主函数*/
int main() {_Sleep();srand((unsigned int)time(0));while (1) {int choice=menu();if (choice==1) {game();} else if (choice==0) {cout<<"退出游戏,再见\n";break;} else {cout<<"输入错误!请重新输入!\n";continue;}}return 0;
}
相关文章:
c++井字棋(单人对电脑:1.电脑随机下 2.电脑AI;3.双人对决)
本游戏分两个模式,三种玩法: 每个玩法中的人下棋规则不变,如下: while (1) {/*输入*/int row,col;cout<<"请输入坐标(1索引):\n";cin>>row>>col;/*切换索引*/row--;col--;if(legal(row,col)) {prin…...
Python 原子操作:使用 `atomic` 模块保证线程安全
Python 原子操作:使用 atomic 模块保证线程安全 在多线程编程中,共享数据的访问往往需要考虑线程安全问题。如果多个线程同时修改同一个变量,可能会导致数据竞争,从而产生不可预测的结果。为了解决这个问题,我们可以使用原子操作。原子操作是指不可中断的操作,要么全部执…...
《解锁AI黑科技:数据分类聚类与可视化》
在当今数字化时代,数据如潮水般涌来,如何从海量数据中提取有价值的信息,成为了众多领域面临的关键挑战。人工智能(AI)技术的崛起,为解决这一难题提供了强大的工具。其中,能够实现数据分类与聚类…...
使用朴素贝叶斯对自定义数据集进行分类
准备自定义数据集 首先,需要一个自定义数据集来进行分类。创建一个简单的二维数据集,其中每个样本有两个特征,并且属于两个类别之一。 import numpy as np import pandas as pd# 创建自定义数据集 np.random.seed(42) num_samples 100# 生…...
《超自然》:科学与灵性融合的自我转变之路
在现代社会中,许多人开始探寻自我成长、身心疗愈与灵性提升的可能性。Bestselling author Dr. Joe Dispenza 的《超自然:普通人如何创造非凡人生》正是在这样的大背景下问世的。书中既融合了量子物理、神经科学和表观遗传学的前沿理论,又吸收…...
学习日记-250202
现在开始要继续写我的日记了......(也可以当作笔记吧) 一.论文 Prompt Transfer for Dual-Aspect Cross Domain Cognitive Diagnosis 主要内容: 主要是加入prompt提示, 为重叠实体设计个性化的提示,为非重叠实体设计共…...
AI(计算机视觉)自学路线
本文仅用来记录一下自学路线方便日后复习,如果对你自学有帮助的话也很开心o(* ̄▽ ̄*)ブ B站吴恩达机器学习->B站小土堆pytorch基础学习->opencv相关知识(Halcon或者opencv库)->四类神经网络(这里跟…...
游戏引擎 Unity - Unity 启动(下载 Unity Editor、生成 Unity Personal Edition 许可证)
Unity Unity 首次发布于 2005 年,属于 Unity Technologies Unity 使用的开发技术有:C# Unity 的适用平台:PC、主机、移动设备、VR / AR、Web 等 Unity 的适用领域:开发中等画质中小型项目 Unity 适合初学者或需要快速上手的开…...
第二篇:多模态技术突破——DeepSeek如何重构AI的感知与认知边界
——从跨模态对齐到因果推理的工程化实践 在AI技术从单一模态向多模态跃迁的关键阶段,DeepSeek通过自研的多模态融合框架,在视觉-语言-语音的联合理解与生成领域实现系统性突破。本文将从技术实现层面,解构其跨模态表征学习、动态融合机制与…...
41. 缺失的第一个正数
参考题解:https://leetcode.cn/problems/first-missing-positive/solutions/7703/tong-pai-xu-python-dai-ma-by-liweiwei1419 难点在于时间复杂度控制在O(n),空间复杂度为常数级。 哈希表时间复杂度符合,但是空间复杂度为O(n) 排序空间复杂…...
DeepSeek R1 简易指南:架构、本地部署和硬件要求
DeepSeek 团队近期发布的DeepSeek-R1技术论文展示了其在增强大语言模型推理能力方面的创新实践。该研究突破性地采用强化学习(Reinforcement Learning)作为核心训练范式,在不依赖大规模监督微调的前提下显著提升了模型的复杂问题求解能力。 技…...
经典游戏红色警戒2之英语
1. New construction options 部署新的建筑物(一般是部署基地车时说的)。 2. Loading 等待。(正在进行) 3. Construction complete 建筑完成。 4. On hold 等待。(暂停进行) 5. Canceled 取消。 6. Ca…...
Zemax 中带有体素探测器的激光谐振腔
激光谐振腔是激光系统的基本组成部分,在光的放大和相干激光辐射的产生中起着至关重要的作用。 激光腔由两个放置在光学谐振器两端的镜子组成。一个镜子反射率高(后镜),而另一个镜子部分透明(输出耦合器)。…...
猴子吃桃问题
# 猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,有多吃了一个,第二天早上有将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩的一半零一个。到第十天早上想再吃时࿰…...
ELECTRA:作为判别器而非生成器的预训练文本编码器
摘要 诸如BERT之类的掩码语言建模(MLM)预训练方法通过将某些标记替换为[MASK]来破坏输入,然后训练模型以重建原始标记。尽管这些方法在下游自然语言处理(NLP)任务中表现良好,但它们通常需要大量的计算资源…...
图论——最小生成树
最小生成树 给定一个无向图,在图中选择若干条边把图的所有节点连起来。要求边长之和最小。在图论中,叫做求最小生成树。 prim算法 prim 算法采用的是一种贪心的策略。 每次将离连通部分的最近的点和点对应的边加入的连通部分,连通部分逐渐扩大…...
【Linux-网络】初识计算机网络 Socket套接字 TCP/UDP协议(包含Socket编程实战)
🎬 个人主页:谁在夜里看海. 📖 个人专栏:《C系列》《Linux系列》《算法系列》 ⛰️ 道阻且长,行则将至 目录 📚一、初识计算机网络 📖 背景 📖 网络协议 🔖OSI七层…...
三数之和(15)
15. 三数之和 - 力扣(LeetCode) 可以一起总结的题目:三角形的最大周长(976)-CSDN博客 解法: class Solution { public:vector<vector<int>> threeSum(vector<int>& nums) {vector…...
6 Flink 状态管理
6 Flink 状态管理 1. State-Keyed State2. State-Operator State3. Broadcast State 我们前面写的 wordcount 的例子,没有包含状态管理。如果一个task在处理过程中挂掉了,那么它在内存中的状态都会丢失,所有的数据都需要重新计算。从容错和消…...
物联网 STM32【源代码形式-使用以太网】连接OneNet IOT从云产品开发到底层MQTT实现,APP控制 【保姆级零基础搭建】
物联网(IoT)是指通过各种信息传感器、射频识别技术、全球定位系统、红外感应器等装置与技术,实时采集并连接任何需要监控、连接、互动的物体或过程,实现对物品和过程的智能化感知、识别和管理。物联网的核心功能包括数据采集与监…...
elasticsearch8.15 高可用集群搭建(含认证Kibana)
文章目录 1.资源配置2.系统参数优化3.JDK17安装4.下载&安装ES 8.155.生成ES的证书(用于ES节点之间进行安全数据传输)6.修改ES 相关配置文件7.创建es用户并启动8.配置ES的账号和密码(用于ES服务端和客户端)9.下载和安装Kibana10.编辑Kibana配置文件11.启动Kiabana12.访问Kia…...
如何实现滑动网格的功能
文章目录 1 概念介绍2 使用方法3 示例代码 我们在上一章回中介绍了SliverList组件相关的内容,本章回中将介绍SliverGrid组件.闲话休提,让我们一起Talk Flutter吧。 1 概念介绍 我们在本章回中介绍的SliverGrid组件是一种网格类组件,主要用来…...
DBASE DBF数据库文件解析
基于Java实现DBase DBF文件的解析和显示 JDK19编译运行,实现了数据库字段和数据解析显示。 首先解析数据库文件头代码 byte bytes[] Files.readAllBytes(Paths.get(file));BinaryBufferArray bis new BinaryBufferArray(bytes);DBF dbf new DBF();dbf.VersionN…...
linux中统计文件中特定单词或字符串的出现次数
在 Linux 中,可以使用 grep 和 wc 命令组合来统计一个文件中特定单词或字符串的个数。假设想统计文件 example.txt 中字符串 “example_string” 出现的次数,可以使用以下命令: grep -o -w example_string example.txt | wc -l这里是每个选项…...
视觉状态空间模型(VMamba)的解读
在计算机视觉领域,设计计算高效的网络架构一直是研究的热点。今天,我想和大家分享一篇发表在 NIPS 2024 上的论文——VMamba:Visual State Space Model,这篇论文提出了一种新的视觉骨干网络,具有线性时间复杂度&#x…...
几种K8s运维管理平台对比说明
目录 深入体验**结论**对比分析表格**1. 功能对比****2. 用户界面****3. 多租户支持****4. DevOps支持** 细对比分析1. **Kuboard**2. **xkube**3. **KubeSphere**4. **Dashboard****对比总结** 深入体验 KuboardxkubeKubeSphereDashboard 结论 如果您需要一个功能全面且适合…...
nodejs:js-mdict 的下载、安装、测试、build
js-mdict 项目的目录结构:js-mdict 项目教程 js-mdict 下载地址: js-mdict-master.zip 先解压到 D:\Source\ js-mdict 6.0.2 用了 ts (TypeScript) 和 Jest,增加了应用开发的难度,因为先要了解 ts 和 Jest。 参阅:测试与开发&a…...
Vue3 表单:全面解析与最佳实践
Vue3 表单:全面解析与最佳实践 引言 随着前端技术的发展,Vue.js 已经成为最受欢迎的前端框架之一。Vue3 作为 Vue.js 的最新版本,带来了许多改进和新的特性。其中,表单处理是 Vue 应用中不可或缺的一部分。本文将全面解析 Vue3 …...
JavaWeb入门-请求响应(Day3)
(一)请求响应概述 请求(HttpServletRequest):获取请求数据 响应(HttpServletResponse):设置响应数据 BS架构:Browser/Server,浏览器/服务器架构模式。客户端只需要浏览器就可访问,应用程序的逻辑和数据都存储在服务端(维护方便,响应速度一般) CS架构:Client/ser…...
【单层神经网络】基于MXNet库简化实现线性回归
写在前面 同最开始的两篇文章 完整程序及注释 导入使用的库# 基本 from mxnet import autograd, nd, gluon # 模型、网络 from mxnet.gluon import nn from mxnet import init # 学习 from mxnet.gluon import loss as gloss # 数据集 from mxnet.gluon…...
一元函数微积分的几何应用:二维平面光滑曲线的曲率公式
文章目录 前言曲率和曲率半径的定义曲率计算公式参数方程形式直角坐标显式方程形式极坐标形式向量形式 前言 本文将介绍二维平面光滑曲线的曲率定义以及不同形式的曲率及曲率半径公式的推导。 曲率和曲率半径的定义 (关于二维平面光滑曲线的定义以及弧长公式请参…...
编程题-最接近的三数之和
题目: 给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数,使它们的和与 target 最接近。 返回这三个数的和。 假定每组输入只存在恰好一个解。 解法一(排序双指针): 题目要求找…...
【LLM-agent】(task4)搜索引擎Agent
note 新增工具:搜索引擎Agent 文章目录 note一、搜索引擎AgentReference 一、搜索引擎Agent import os from dotenv import load_dotenv# 加载环境变量 load_dotenv() # 初始化变量 base_url None chat_model None api_key None# 使用with语句打开文件…...
string类详解
为什么学习string类? 1.1 C语言中的字符串 C语言中,字符串是以\0结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数,但是这些库函数与字符串是分离开的,不太符合OOP的思想…...
【含文档+PPT+源码】基于微信小程序农家乐美食餐厅预约推广系统
项目介绍 本课程演示的是一款基于微信小程序农家乐美食餐厅预约推广系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 1.包含:项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部署运行本套系统 …...
享元模式——C++实现
目录 1. 享元模式简介 2. 代码示例 1. 享元模式简介 享元模式是一种结构型模式。 享元模式用于缓存共享对象,降低内存消耗。共享对象相同的部分,避免创建大量相同的对象,减少内存占用。 享元模式需要将对象分成内部状态和外部状态两个部分…...
《苍穹外卖》项目学习记录-Day11订单统计
根据起始时间和结束时间,先把begin放入集合中用while循环当begin不等于end的时候,让begin加一天,这样酒吧把这个区间内的时间放到List集合。 查询每天的订单总数也就是查询的时间段是大于当天的开始时间(0点0分0秒)小…...
Python3 OS模块中的文件/目录方法说明十六
一. 简介 前面文章简单学习了 Python3 中 OS模块中的文件/目录的部分函数。 本文继续来学习 OS 模块中文件、目录的操作方法:os.unlink() 方法、os.utime()方法。 二. Python3 OS模块中的文件/目录方法 1. os.unlink() 方法 os.unlink() 方法用于删除文件,如果文…...
(二)QT——按钮小程序
目录 前言 按钮小程序 1、步骤 2、代码示例 3、多个按钮 ①信号与槽的一对一 ②多对一(多个信号连接到同一个槽) ③一对多(一个信号连接到多个槽) 结论 前言 按钮小程序 Qt 按钮程序通常包含 三个核心文件: m…...
图论——spfa判负环
负环 图 G G G中存在一个回路,该回路边权之和为负数,称之为负环。 spfa求负环 方法1:统计每个点入队次数, 如果某个点入队n次, 说明存在负环。 证明:一个点入队n次,即被更新了n次。一个点每次被更新时所对应最短路的边数一定是…...
96,【4】 buuctf web [BJDCTF2020]EzPHP
进入靶场 查看源代码 GFXEIM3YFZYGQ4A 一看就是编码后的 1nD3x.php 访问 得到源代码 <?php // 高亮显示当前 PHP 文件的源代码,用于调试或展示代码结构 highlight_file(__FILE__); // 关闭所有 PHP 错误报告,防止错误信息泄露可能的安全漏洞 erro…...
Rust 的基本类型有哪些,他们存在堆上还是栈上,是否可以COPY?
Rust 的基本类型主要包括以下几类: 1. 整数类型(Integer) Rust 提供了有符号和无符号的整数类型: 有符号整数(i8, i16, i32, i64, i128, isize)无符号整数(u8, u16, u32, u64, u128, usize&a…...
函数与递归
函数与递归 声明或者定义应该在使用之前(不单单针对于函数) 函数对全局变量做出的改变还是不会随着函数结束而消失的 函数声明在main函数里面也是可以的 引用变量和引用实体的变化是一样的 传址调用比传值调用效率高 重载函数->编译器会根据传递…...
UE5 蓝图学习计划 - Day 11:材质与特效
在游戏开发中,材质(Material)与特效(VFX) 是提升视觉体验的关键元素。Unreal Engine 5 提供了强大的 材质系统 和 粒子系统(Niagara),让开发者可以通过蓝图控制 动态材质、光效变化、…...
DeepSeek 详细使用教程
1. 简介 DeepSeek 是一款基于人工智能技术的多功能工具,旨在帮助用户高效处理和分析数据、生成内容、解答问题、进行语言翻译等。无论是学术研究、商业分析还是日常使用,DeepSeek 都能提供强大的支持。本教程将详细介绍 DeepSeek 的各项功能及使用方法。…...
低代码系统-产品架构案例介绍、炎黄盈动-易鲸云(十二)
易鲸云作为炎黄盈动新推出的产品,在定位上为低零代码产品。 开发层 表单引擎 表单设计器,包括设计和渲染 流程引擎 流程设计,包括设计和渲染,需要说明的是:采用国际标准BPMN2.0,可以全球通用 视图引擎 视图…...
【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】1.27 线性代数王国:矩阵分解实战指南
1.27 线性代数王国:矩阵分解实战指南 #mermaid-svg-JWrp2JAP9qkdS2A7 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-JWrp2JAP9qkdS2A7 .error-icon{fill:#552222;}#mermaid-svg-JWrp2JAP9qkdS2A7 .erro…...
【C语言】动态内存管理
1、为什么存在动态内存分配?2、动态内存管理函数介绍(1)malloc(2)free(3)calloc(4)realloc 3、常见动态内存错误(1)使用free释放动态内存开辟的一…...
Cocoa和Cocoa Touch是什么语言写成的?什么是Cocoa?编程语言中什么是框架?为什么苹果公司Cocoa类库有不少NS前缀?Swift编程语言?
Cocoa和Cocoa Touch是什么语言写成的? 二者主要都是用Objective-C语言编写而成的。 什么是Cocoa? Cocoa是苹果操作系统macOS和iOS上的应用程序开发框架集合,核心语言是Objective-C编程语言,在移动平台被称为Cocoa Touch,Cocoa包含多个子框架…...
Qt Creator 中使用 vcpkg
Qt Creator 中使用 vcpkg Qt Creator 是一个跨平台的轻量级 IDE,做 Qt 程序开发的同学们肯定对这个 IDE 都比较属于。这个 IDE 虽然没有 Visual Stdio 功能那么强,但是由于和 Qt 集成的比较深,用来开发 Qt 程序还是很顺手的。 早期…...