棋牌软件开发教程/晨阳seo顾问

棋牌软件开发教程,晨阳seo顾问,做网站的一般多少钱,商丘微信推广平台目录 一.杨氏矩阵 1.初级 2.想把下标带回来 二.字符串左旋 算法改进 三.判断是否为字符串旋转结果 算法改进 四. 3个字符函数 1.strcat 2.strncat 3.strstr 一.杨氏矩阵 数字矩阵,每行从左到右递增,每列从上到下递增,编写程序在矩…

目录

一.杨氏矩阵

1.初级

2.想把下标带回来

二.字符串左旋

算法改进

三.判断是否为字符串旋转结果

算法改进

四. 3个字符函数

1.strcat

2.strncat

3.strstr


一.杨氏矩阵

数字矩阵,每行从左到右递增,每列从上到下递增,编写程序在矩阵中查找某个数字是否存在。

要求:时间复杂度小于O(N);

1.初级

我们采用这样的算法:

  • 由于每行每列都是递增的,用矩阵左下或右上角的数与目标数比较(右上角为例)。
  • 右上角的元素,是其所在行中最大的,列中最小的。
  • 若目标数大,则删除右上角元素所在行。用新矩阵的右上角再与目标数比较。
  • 若目标数小,则删除右上角元素所在列。用新矩阵的右上角再与目标数比较。
  • 重复以上过程,直至找到,或越界

代码演示:

void find_k(int arr[3][3], int r, int c, int k)
{int x = 0;int y = c - 1;int flag = 0;while (x <= r - 1 && y >= 0){if (k > arr[x][y]){x++;}else if (k < arr[x][y]){y--;}else{printf("找到了,下标是:%d %d\n", x, y);flag = 1;break;}}if (flag == 0)printf("找不到\n");
}int main()
{int arr[3][3] = { 1,2,3,4,5,6,7,8,9 };int k = 7;//要查找的元素find_k(arr, 3, 3, k);return 0;
}

2.想把下标带回来

难道要这样吗?

		else{printf("找到了,下标是:%d %d\n", x, y);flag = 1;return x, y;}

错了。没有这样写的,只能返回一个值

我们需要把x,y创建在调用函数外面,再传x,y地址。

int find_k(int arr[3][3], int* px, int* py, int k)
{int x = 0;int y = *py - 1;while (x <= *px - 1 && y >= 0){if (arr[x][y] < k){x++;}else if (arr[x][y] > k){y--;}else{*px = x;*py = y;return 1;}}return 0;
}int main()
{int arr[3][3] = { 1,2,3,4,5,6,7,8,9 };int k = 17;//查找的值int x = 3;int y = 3;int ret = find_k(arr, &x, &y, k);if (ret == 0)printf("找不到\n");elseprintf("找到了,下标是:%d %d", x, y);return 0;
}

二.字符串左旋

实现一个函数,可以左旋字符串中的k个字符。

例如:ABCD左旋一个字符得到BCDA          ABCD左旋两个字符得到CDAB

思路是这样:

左旋一个字符:

  1. 把第一个字符放进 tmp 中。
  2. 将后面的字符向前挪。
  3. 将 tmp 中的第一个字符放到最后面

左旋 k 个字符:重复 k 次。

代码演示:

void left_move(char arr[], int k)
{int i = 0;int len = strlen(arr);k %= len;for (i = 0; i < k; i++){//旋转1个字符//1char tmp = arr[0];//2int j = 0;for (j = 0; j < len - 1; j++){arr[j] = arr[j + 1];}//3arr[len - 1] = tmp;}
}int main()
{char arr[] = "abcdef";int k = 8;left_move(arr, k);printf("%s\n", arr);return 0;
}

算法改进

当字符串比较长时,上面那种一个一个交换的方法效率低下。

我们尝试这样的思路:逆序字符串。逆序左边,逆序右边,整体逆序。

例如:

#include <assert.h>void reverse(char* left, char* right)
{assert(left);//断言指针的有效性assert(right);while (left < right){char tmp = *left;*left = *right;*right = tmp;left++;right--;}
}void left_move(char arr[], int k)
{int len = strlen(arr);k %= len;//逆序左reverse(arr, arr + k - 1);//逆序右reverse(arr + k, arr + len - 1);//逆序整体reverse(arr, arr + len - 1);
}int main()
{char arr[] = "abcdef";int k = 8;left_move(arr, k);printf("%s\n", arr);return 0;
}

三.判断是否为字符串旋转结果

写一个函数,判断一个字符串是否为另外一个字符串旋转之后的字符串。

例如:给定s1 =AABCD和s2 = BCDAA,返回1              给定s1=abcd和s2=ACBD,返回0

思路:每左旋一次,都进行判断。

代码演示:

#include <string.h>void left_move(char arr[], int k)
{int len = strlen(arr);k %= len;//逆序左reverse(arr, arr + k - 1);//逆序右reverse(arr + k, arr + len - 1);//逆序整体reverse(arr, arr + len - 1);
}int is_left_move(char arr1[], char arr2[])
{int len1 = strlen(arr1);int len2 = strlen(arr2);if (len1 != len2)return 0;int i = 0;for (i = 0; i < len1; i++){left_move(arr1, 1);//每次旋转1个if (strcmp(arr1, arr2) == 0)//比较{return 1;}}//从来没有 return 1; 那就不可能 YESreturn 0;
}int main()
{char arr1[] = "AABCD";char arr2[] = "ABCDA";int ret = is_left_move(arr1, arr2);if (ret == 1){printf("YES\n");}else{printf("NO\n");}return 0;
}

这种方法其实也不够简练

算法改进

各位读者先阅读 四.

上面的方法其实把 arr1 旋转后所有的可能情况都列出来了,再进行比较。

有没有办法让它直接得到所有旋转后的可能性? 有的兄弟,有的!

比如:AABCDAABCD(自己重复两遍)

发现:AABCDAABCD 里包含了 AABCD 所有旋转后的可能性。

只需要给 arr1 追加 arr1 后,去看 arr2 是不是追加后的子串。如果是,那就是 arr1 旋转得来的。

前提:如果长度不一样,要提前 Pass

注意:给 arr1 追加时,要有空间,最好 char arr1[20],给大一点。要不然程序崩了

代码演示:

#include <string.h>
int is_left_move(char arr1[], char arr2[])
{int len1 = strlen(arr1);int len2 = strlen(arr2);if (len1 != len2)return 0;strncat(arr1, arr1, len1);if (strstr(arr1, arr2) != NULL)return 1;elsereturn 0;
}int main()
{char arr1[20] = "AABCD";char arr2[] = "ABCDA";int ret = is_left_move(arr1, arr2);if (ret == 1){printf("YES\n");}else{printf("NO\n");}return 0;
}

这样写,我们把大量代码依赖于库函数实现

四. 3个字符函数

1.strcat

头文件:#include <string.h>

#include <string.h>
int main()
{char arr[20] = "hello ";//想在后面追加 worldstrcat(arr, "world");printf("%s\n", arr);return 0;
}

2.strncat

头文件:#include <string.h>

在 hello 后追加几个,由我们控制。用 strcat 的另一个版本:strncat

#include <string.h>
int main()
{char arr[20] = "hello ";strncat(arr, "world", 3); // 5printf("%s\n", arr);return 0;
}

     

3.strstr

头文件:#include <string.h>

strstr 是在arr1字符串中查找arr2是否存在

  • 如果存在则返回 arr2 在 arr1 中首次出现的地址(位置)
  • 如果不存在返回 NULL
#include <string.h>
int main()
{char arr1[] = "abcdefabcdef";char arr2[] = "def";char* ret = strstr(arr1, arr2);if (ret == NULL){printf("不存在\n");}else{printf("%s\n", ret);}return 0;
}

本篇的分享就到这里了,感谢观看,如果对你有帮助,别忘了点赞+收藏+关注

小编会以自己学习过程中遇到的问题为素材,持续为您推送文章。

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

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

相关文章

VSCode中搜索插件显示“提取扩展时出错。Failed to fetch”问题解决!

大致的问题如下&#xff0c;在VSCode的插件商店搜索插件时提示如下&#xff1a; 导致的情况有以下几点&#xff1a; 1、代理问题&#xff0c;如果是代理引起的&#xff0c;可以继续使用代理后也能搜索和安装插件。 2、还有可能是你的所连接的网络设置了防火墙&#xff0c;比较…

双指针(2)—三数之和

文章目录 题目解析解法&#xff08;排序双指针&#xff09;&#xff1a;哈希解法附加Java代码&#xff1a; 力扣题目&#xff1a;三数之和 题目解析 解法&#xff08;排序双指针&#xff09;&#xff1a; **算法思路&#xff1a;** 本题与两数之和类似&#xff0c;是⾮常经典的…

JVM 知识点梳理

JDK 、JRE、JVM JDK&#xff08; Java Development Kit &#xff09; Java开发工具包 JRE 开发命令工具&#xff08;运行java.exe、编译javac.exe、javaw.exe&#xff09; JRE&#xff08; Java Runtime Environment &#xff09;Java运行环境 JVM Java核心类库&#xff08;l…

DeepSeek-R1论文深度解析:纯强化学习如何引爆LLM推理革命?

技术突破&#xff1a;从“无监督”到“自主进化”的跨越 paper &#xff1a;https://arxiv.org/pdf/2501.12948目录 技术突破&#xff1a;从“无监督”到“自主进化”的跨越1 DeepSeek-R1-Zero&#xff1a; RLnoSFT1.1 R1-Zero&#xff1a; GRPO&#xff08;Group Relative Po…

表格标题竖直

使用文本方式使表格怎么竖列 思路&#xff1a;表格竖直书写&#xff0c;里面的内容水平书写 使用到的是css中的文本效果&#xff1a; writing-mode&#xff1a;书写方式horizontal-tb&#xff1a;水平vertical-rl&#xff1a;竖直<style>table {writing-mode: vertical…

AI+视频赋能智慧农业:EasyCVR打造全域可视化农场监管平台

随着科技的飞速发展&#xff0c;传统农业正加速向智慧农业转型&#xff0c;农场管理也迎来了前所未有的变革机遇。在这一进程中&#xff0c;如何有效整合先进的信息技术&#xff0c;实现农场的精准化、智能化管理&#xff0c;成为了摆在农场主和农业管理者面前的关键课题。 基于…

简化神经元模型6 -- Hindmarsh-Rose Model

Hindmarsh-Rose 模型 目录 0. 写在前面 1. Hindmarsh-Rose 模型的定义 2. Hindmarsh-Rose 模型簇发放的动力学机制 3. Hindmarsh-Rose 模型的其他发放模式 4. 分析过程所用到的一系列 BrainPy 代码 0. 写在前面 前面介绍了: Hodgkin-Huxley Model 简化神经元模型1 – LIF M…

第六届电气、电子信息与通信工程国际学术会议 (EEICE 2025)

重要信息 官网&#xff1a;www.eeice.net&#xff08;点击了解参会投稿等&#xff09; 时间&#xff1a;2025年4月18-20日 地点&#xff1a;中国-深圳技术大学 简介 第六届电气、电子信息与通信工程 (EEICE 2025&#xff09;将于2025年4月18-20日在中国深圳召开。 EEICE 20…

计算机操作系统(三) 操作系统的特性、运行环境与核心功能(附带图谱更好对比理解))

计算机操作系统&#xff08;三&#xff09; 操作系统的特性、运行环境与核心功能 前言一、操作系统的基本特性1.1 并发1.2 共享1.3 虚拟1.4 异步 二、操作系统的运行环境2.1 硬件支持2.2 操作系统内核2.3 处理机的双重工作模式2.4 中断与异常 三、操作系统的主要功能3.1 处理机…

批量将 PPT 转换为PDF/XPS/JPG图片等其它格式

PPT 文档经常有转换为其它格式的需求&#xff0c;比如将 PPT 转换为 PDF、将 PPT 转换为图片、生成 PPT 预览图等&#xff0c;这在某些场景下非常的有用&#xff0c;今天给大家介绍的就是如何批量将 PDF 转换为 PDF、JPG、Tiff 等多种格式的操作。 在工作中我们经常需要接触 PP…

【css酷炫效果】纯CSS实现3D翻转卡片动画

【css酷炫效果】纯CSS实现3D翻转卡片动画 缘创作背景html结构css样式完整代码效果图 想直接拿走的老板&#xff0c;链接放在这里&#xff1a;https://download.csdn.net/download/u011561335/90490472 缘 创作随缘&#xff0c;不定时更新。 创作背景 刚看到csdn出活动了&am…

Flask多参数模版使用

需要建立目录templates&#xff1b; 把建好的html文件放到templates目录里面&#xff1b; 约定好参数名字&#xff0c;单个名字可以直接使用&#xff1b;多参数使用字典传递&#xff1b; 样例&#xff1a; from flask import render_template # 模板 (Templates) #Flask 使用…

SVN简明教程——下载安装使用

SVN教程目录 一、开发中的实际问题二、简介2.1 版本控制2.2 Subversion2.3 Subversion的优良特性2.4 工作原理2.5 SVN基本操作 三、Subversion的安装与配置1. 服务器端程序版本2. 下载源码包3. 下载二进制安装包4. 安装5. 配置版本库① 为什么要配置版本库&#xff1f;② 创建目…

OpenCV图像拼接(1)概述

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 此图说明了在Stitcher类中实现的拼接模块流程。使用该类&#xff0c;可以配置/移除某些步骤&#xff0c;即根据特定需求调整拼接流程。流程中的所…

Linux 音频驱动 WM8960 音频 DAC IC 音乐播放与录音

这些先引出一个内容&#xff0c;是 Linux 内核的音频系统&#xff0c;ALSA&#xff0c;提供了对声卡的低级访问&#xff0c;支持 PCM&#xff0c;播放/录音、混音、MIDI 处理等功能。它取代了旧的 OSS&#xff0c;并提供更强大的功能和更好的硬件支持。 ALSA 主要特点&#xf…

OpenHarmony 开源鸿蒙北向开发——3.配置SDK

安装、配置完成之后我们就要配置SDK。 我们创建工程后&#xff0c;点击右上角设置 进入设置 进入OpenHarmony SDK&#xff0c;选择编辑 这里配置一下SDK安装位置 点击完成 这里我们API版本勾选第一个即可 确认安装 勾选接受 这里要等一会 安装完成后&#xff0c;点击完成

C#通过API接口返回流式响应内容---SignalR方式

1、背景 在上两篇《C#通过API接口返回流式响应内容—分块编码方式》和《C#通过API接口返回流式响应内容—SSE方式》实现了流式响应的内容。 上面的这两个主要是通过HTTP的一些功能&#xff0c;除了这些之外&#xff0c;还有WebSocket的方式。C#中的WebSocket的有比较多的方案&…

识别并脱敏上传到deepseek/chatgpt的文本文件中的身份证/手机号

本文将介绍一种简单高效的方法解决用户在上传文件到DeepSeek、ChatGPT,文心一言,AI等大语言模型平台过程中的身份证号以及手机号等敏感数据识别和脱敏问题。 DeepSeek、ChatGPT,Qwen,Claude等AI平台工具快速的被接受和使用,用户每天上传的文本数据中潜藏着大量敏感信息,…

第六:go 操作 redis-go

Redis 在项目开发中redis的使用也比较频繁&#xff0c;本文介绍了Go语言中go-redis库的基本使用。 Redis介绍 Redis是一个开源的内存数据库&#xff0c;Redis提供了多种不同类型的数据结构&#xff0c;很多业务场景下的问题都可以很自然地映射到这些数据结构上。除此之外&am…

fastapi+angular外卖系统

说明&#xff1a; fastapiangular外卖系统 1.美食分类&#xff08;粥&#xff0c;粉&#xff0c;面&#xff0c;炸鸡&#xff0c;炒菜&#xff0c;西餐&#xff0c;奶茶等等&#xff09; 2.商家列表 &#xff08;kfc&#xff0c;兰州拉面&#xff0c;湘菜馆&#xff0c;早餐店…