当前位置: 首页 > news >正文

C语言:杨氏矩阵、杨氏三角、单身狗1与单身狗2

下面介绍四道题目和解法


1.杨氏矩阵

算法:右上角计算

题目:有一个数字矩阵,矩阵的每行从左到右是递增的,矩阵从上到下是递增的,请编写程序在这样的矩阵中查找某个数字是否存在。

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

代码:

#include<stdio.h>
int Find_arr(int arr[3][3],int r, int c, int k)
{int x = 0;int y = c - 1;while (x<r&&y>=0){if (arr[x][y] < k){x++;}else if (arr[x][y] > k){y--;}elsereturn 1;}return 0;
}int main()
{int arr[3][3] = {1,2,3,4,5,6,7,8,9};int k = 0;printf("输入需要查找的数字:");scanf("%d",&k);int ret = 0;ret=Find_arr(arr,3,3,k);if (ret == 1)printf("找到了\n");elseprintf("找不到\n");return 0;
}

 【关键代码部分解析】

杨氏矩阵的特点:矩阵的每行从左到右是递增的,矩阵从上到下是递增的

代码思路:从右上角或者左下角开始遍历,我们这里从右上角开始

假设要找的值是5

第一次遍历:与右上角的元素比较,也就是与3比较。

第二次遍历:与4比较。

第三次遍历:与5比较,相等,得出结果。

【第二种代码】 

要求找到了并且返回该元素的下标:

返回双参数代码写法:

#include<stdio.h>
#include<assert.h>
int Find_arr(int arr[3][3], int* px, int* py, int k)
{assert(px&&py);int x = 0;int y = *py-1;while (x<*px&&*py>=0){if (arr[x][y] < k){x++;}else if (arr[x][y] > k){y--;}else{*px = x;*py = y;return 1;}}*px = -1;*py = -1;return 0;
}int main()
{int arr[3][3] = { 1,2,3,4,5,6,7,8,9 };int k = 0;printf("输入需要查找的数字:");scanf("%d", &k);int ret = 0;int x = 3;int y = 3;ret = Find_arr(arr, &x,&y, k);if (ret == 1){printf("找到了\n");printf("下标是:%d %d\n", x, y);}else{printf("找不到\n");printf("下标是:%d %d\n", x, y);}return 0;
}

返回双参数思路:

将下标的地址作为参数,不需要返回两个下标即可达到带回参数的目的。

2.杨辉三角

我们想要打印出下面的图案,并且符号性质,需要怎么做呢?

(1)图形讲解

我们可以创建一个二维数组,刚开始都赋值0。

然后可以打印出下半部分就行。

代码:

#include<stdio.h>
int main()
{int arr[10][10] = { 0 };//创建二维数组并初始化成0//打印下半部分int i = 0;for (i=0;i<10;i++){int j = 0;for (j=0;j<=i;j++)//打印三角形的关键{printf("%d ",arr[i][j]);}printf("\n");}return 0;
}

运行结果:

(2)赋值讲解

现在知道了杨辉三角的形状是怎么样打印出来的,接下来需要对其赋值,成为真正的杨辉三角。

杨辉三角:从第三行和第二列开始,每个数字的值=其上方的数字+左上角的数字 (空白的默认为0),其他部分默认赋值1。

代码: 

#include<stdio.h>
int main()
{int arr[10][10] = { 0 };//创建二维数组并初始化成0//对杨辉三角赋值(二维数组)int i = 0;for (i = 0; i < 10; i++){int j = 0;for (j = 0; j <= i; j++){if (j == 0 || i == j)arr[i][j] = 1;if (i >= 2 && j >= 1)//第三行和第二列开始//关系arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];}}//打印下半部分i = 0;for (i=0;i<10;i++){int j = 0;for (j=0;j<=i;j++)//打印三角形的关键{printf("%5d ",arr[i][j]);}printf("\n");}return 0;
}

运行结果:

赋值解析: 

 其实这就是杨辉三角了,要是打出类似等腰三角形的性质,则需要控制打印的格式,属于打印的知识,这里暂时不介绍

等腰三角的杨辉三角:暂时不做解析

#include<stdio.h>int main()
{int arr[10][10] = { 0 };//初始化int i = 0;for (i = 0; i < 10; i++){int j = 0;for (j = 0; j <= i; j++){if (j == 0 || i == j)arr[i][j] = 1;if (i >= 2 && j >= 1)//第三行和第二列开始arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];}}//打印i = 0;int k = 10;for (i = 0; i < 10; i++){for (int k = 0; k < 26 - (6 * i / 2); k++)//打印一行前面的空格{printf(" ");}int j = 0;for (j = 0; j <= i; j++){printf("%5d ", arr[i][j]);}printf("\n");}return 0;
}

运行结果:

3.单身狗1

题目:一个数组中只有一个数字单独出现,其他的数字都成对出现,请找出这个单身狗

如:1,2,3,4,5,1,2,3,4,只有5只出现了一次,所以需要找出5

【思路】

(1)利用异或操作符^:(二进制对应位)相同为0,相异为1。

(2)如:a^a=0,a^0=0。

(3)并且支持交换律,所以我们可以将所有的数据和0异或在一起,最终的结果就是“单身狗”。

代码解法:

#include<stdio.h>
int Find_dog_arr(int arr[],int sz)
{int tmp = 0;int i = 0;for (i = 0; i < sz; i++){tmp = tmp ^ arr[i];//全部异或在一起}return tmp;
}
int main()
{int arr[] = { 1,2,3,4,5,1,2,3,4 };int sz = sizeof(arr) / sizeof(arr[0]);int ret=Find_dog_arr(arr,sz);printf("%d\n",ret);return 0;
}

 tmp的最终结果就是5。

4.单身狗2

题目:

一个数组中只有两个数字是出现一次,其他所有数字都出现了两次。

编写一个函数找出这两个只出现一次的数字。

例如:

有数组的元素是:1,2,3,4,5,1,2,3,4,6

只有5和6只出现1次,要找出5和6。

【思路】

(1)这是单身狗1的升级版,显然直接异或是不行的。

(2)所以我们可以先进行分类,将两个单身狗分在两个不同的组,再进行异或操作。

(3)怎么分类:找出分类依据。

   利用异或操作分类,将所有数字异或起来的结果其实就是两个单身狗异或起来的结果;再根据结果的二进制,也就是根据某一位二进制是否为1进行分类。(两个单身狗肯定有不同的二进制位,结果肯定为1)

【分类操作】

void Find_dog2_arr(int arr[], int sz, int* p1, int* p2)
{int tmp = 0;int i = 0;//1.全部异或在一起,结果为两个单身狗异或在一起的结果for (i = 0; i < sz; i++){tmp ^= arr[i];}//2.找出分组的依据i = 0;int r = 0;for (i = 0; i < 32; i++){r = arr[i];if ((tmp >> i) & 1 == 1){r = i;}}
}

(1)tmp是两个单身狗异或在一起的结果

(2)(tmp>>i)&1==1的意思是找出tmp的二进制位为1的位,也就是分组的关键

【思路刨析】

【整体代码】

#include<stdio.h>
void Find_dog2_arr(int arr[], int sz, int* p1, int* p2)
{int tmp = 0;int i = 0;//1.全部异或在一起,结果为两个单身狗异或在一起的结果for (i = 0; i < sz; i++){tmp ^= arr[i];}//2.找出分组的依据i = 0;int r = 0;for (i = 0; i < 32; i++){r = arr[i];if ((tmp >> i) & 1 == 1){r = i;}}//3.分组int u1 = 0;int u2 = 0;for (i = 0; i < sz; i++){if ((arr[i] >> r) & 1 == 1)//按位与{u1 ^= arr[i];}else{u2 ^= arr[i];}}*p1 = u1;*p2 = u2;
}
int main()
{int arr[] = { 1,2,3,4,5,1,2,3,4,10 };int sz = sizeof(arr) / sizeof(arr[0]);int s1 = 0;int s2 = 0;Find_dog2_arr(arr, sz, &s1, &s2);printf("单身狗1:%d\n单身狗2:%d", s1, s2);return 0;
}

相关文章:

C语言:杨氏矩阵、杨氏三角、单身狗1与单身狗2

下面介绍四道题目和解法 1.杨氏矩阵 算法&#xff1a;右上角计算 题目&#xff1a;有一个数字矩阵&#xff0c;矩阵的每行从左到右是递增的&#xff0c;矩阵从上到下是递增的&#xff0c;请编写程序在这样的矩阵中查找某个数字是否存在。 要求&#xff1a;时间复杂度小于O(N…...

PX4天大bug,上电反复重启,连不上QGC!

一、Debug与Bug 由于自己写的代码CPU占用率过高&#xff0c;解锁报错 CPU load too high!无法解锁。 于是把 COM_CPU_MAX 从默认的 90% 变为 99%&#xff08;千万别这样搞&#xff0c;这是bug&#xff0c;除非想玩&#xff01;&#xff09;。 然后重启&#xff0c;飞机就反…...

归并排序——

之前我们学习过把两个有序数组合并再一起后任然有序&#xff0c;就叫归并&#xff1b; 那么&#xff0c;排序是否也可以把一个要排序的数组分割成两个有序的数组&#xff0c;然后归并&#xff0c;之后再拷贝回原数组&#xff0c;就实现了排序 但是怎么才能控制分割成的数组是有…...

阿里云企业邮箱基于Spring Boot快速实现发送邮件功能

邮件在项目中经常会被用到&#xff0c;比如用邮件发送通知。比如&#xff0c;通过邮件注册、认证、找回密码、系统报警通知、报表信息等。本篇文章带大家通过SpringBoot快速实现一个发送邮件的功能。 邮件协议 下面先简单了解一下常见的邮件协议。常用的电子邮件协议有SMTP、…...

大数据Doris(十三):创建用户和创建数据库并赋予权限

文章目录 创建用户和创建数据库并赋予权限 一、创建用户...

【Unity小技巧】可靠的相机抖动及如何同时处理多个震动

文章目录 每篇一句前言安装虚拟相机虚拟相机震动测试代码控制震动清除震动控制震动的幅度和时间 两个不同的强弱震动同时发生源码完结 每篇一句 围在城里的人想逃出来&#xff0c;站在城外的人想冲进去&#xff0c;婚姻也罢&#xff0c;事业也罢&#xff0c;人生的欲望大都如此…...

Megatron-LM GPT 源码分析(四) Virtual Pipeline Parallel分析

引言 本文接着上一篇【Megatron-LM GPT 源码分析&#xff08;三&#xff09; Pipeline Parallel分析】&#xff0c;基于开源代码 GitHub - NVIDIA/Megatron-LM: Ongoing research training transformer models at scale &#xff0c;通过GPT的模型运行示例&#xff0c;从三个维…...

IOC课程整理-8 Spring Bean作用域

1 Spring Bean作用域 2" singleton " Bean作用域 3" prototype " Bean作用域 • 注意事项 • Spring 容器没有办法管理 prototype Bean 的完整生命周期&#xff0c;也没有办法记录实例的存在。销毁回调方法将不会执行&#xff0c;可以利用 BeanPostProces…...

本地websocket服务端暴露至公网访问【内网穿透】

本地websocket服务端暴露至公网访问【cpolar内网穿透】 文章目录 本地websocket服务端暴露至公网访问【cpolar内网穿透】1. Java 服务端demo环境2. 在pom文件引入第三包封装的netty框架maven坐标3. 创建服务端,以接口模式调用,方便外部调用4. 启动服务,出现以下信息表示启动成功…...

C/C++跨平台构建工具CMake-----灵活添加库并实现开发和生产环境的分离

目录 1.概述2.创建项目3 配置运行项目3.1 编写开平方根示例代码3.2 编写CMake构建脚本 4.使用子模块实现求平方根的功能4.1 在子模块中实现两种求平方根的方法4.2 构建Mathfunctions子模块4.3 在根目录引用子模块的功能4.3.1 编写构建脚本4.3.2 编写C代码使用MathFunctions库中…...

javascript判断对象中是否存在某个字段

1. in 如果指定的属性在指定的对象或其原型链中&#xff0c;则 in 运算符返回 true。 const car { make: Honda, model: Accord, year: 1998 };console.log(make in car); // truedelete car.make; if (make in car false) {car.make Suzuki; }console.log(car.make); //…...

网络基础-2

IEEE制定了一个名为GARP的协议框架&#xff0c;该框架协议包含了两个具体协议&#xff0c;GMRP和GVRP。GVRP可以大大降低VLAN配置过程中的手工的工作量。 IP本身是一个协议文件的名称&#xff0c;该协议主要定义阐释了IP报文的格式。 类型网络号位数网络号个数主机号位数每个…...

【MySQL索引与优化篇】索引的分类与设计原则

索引的分类与设计原则 文章目录 索引的分类与设计原则1. 索引的分类2. MySQL8.0索引新特性2.1 支持降序索引2.2 隐藏索引 3. 索引的设计原则3.1 适合索引的10个设计原则3.2 限制索引的数目3.3 不适合使用索引的情况 1. 索引的分类 从 功能逻辑 上说&#xff0c;索引主要有 4 种…...

基于Java的民航售票管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09; 代码参考数据库参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&am…...

应用案例|基于三维机器视觉的机器人引导电动汽车充电头自动插拔应用方案

Part.1 项目背景 人类对减少温室气体排放、提高能源效率以及减少对化石燃料的依赖&#xff0c;加速了电动汽车的普及&#xff0c;然而&#xff0c;电动汽车的充电依然面临一些挑战。传统的电动汽车充电通常需要人工干预&#xff0c;插入和拔出充电头&#xff0c;这不仅可能导致…...

基于Java的流浪动物救助管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09; 代码参考数据库参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&am…...

关于错误javax.net.ssl.SSLException: Received close_notify during handshake

今天开发的小伙伴遇到一问题&#xff0c;报错内容是&#xff1a; javax.net.ssl.SSLException: Received close_notify during handshake at sun.security.ssl.Alerts.getSSLException(Unknown Source) at sun.security.ssl.SSLSocketImpl.fatal(Unknown Source) at sun.securi…...

JAVA实现校园失物招领管理系统 开源

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容2.1 招领管理模块2.2 寻物管理模块2.3 系统公告模块2.4 感谢留言模块 三、界面展示3.1 登录注册3.2 招领模块3.3 寻物模块3.4 公告模块3.5 感谢留言模块3.6 系统基础模块 四、免责说明 一、摘要 1.1 项目介绍 基于VueSpri…...

基于Java的体育竞赛成绩管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09; 代码参考数据库参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&am…...

网络设备远程登录和管理-双厂商

✍ 设备开局都要做哪些配置&#xff1f; ✍ 思科华为的配置命令有什么区别&#xff1f; ✍ 实战演示不同操作系统的配置&#xff1b; -- 本地设备调试 - console接口配置 -- 远程设备管理 - telnet 不加密 | ssh 加密的 -- web界面调试 - 补充的作用 -- SD…...

uniapp 对接腾讯云IM群组成员管理(增删改查)

UniApp 实战&#xff1a;腾讯云IM群组成员管理&#xff08;增删改查&#xff09; 一、前言 在社交类App开发中&#xff0c;群组成员管理是核心功能之一。本文将基于UniApp框架&#xff0c;结合腾讯云IM SDK&#xff0c;详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

黑马Mybatis

Mybatis 表现层&#xff1a;页面展示 业务层&#xff1a;逻辑处理 持久层&#xff1a;持久数据化保存 在这里插入图片描述 Mybatis快速入门 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6501c2109c4442118ceb6014725e48e4.png //logback.xml <?xml ver…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版​分享

平时用 iPhone 的时候&#xff0c;难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵&#xff0c;或者买了二手 iPhone 却被原来的 iCloud 账号锁住&#xff0c;这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

c++ 面试题(1)-----深度优先搜索(DFS)实现

操作系统&#xff1a;ubuntu22.04 IDE:Visual Studio Code 编程语言&#xff1a;C11 题目描述 地上有一个 m 行 n 列的方格&#xff0c;从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子&#xff0c;但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

基于当前项目通过npm包形式暴露公共组件

1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹&#xff0c;并新增内容 3.创建package文件夹...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)

宇树机器人多姿态起立控制强化学习框架论文解析 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架&#xff08;一&#xff09; 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

USB Over IP专用硬件的5个特点

USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中&#xff0c;从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备&#xff08;如专用硬件设备&#xff09;&#xff0c;从而消除了直接物理连接的需要。USB over IP的…...

PostgreSQL——环境搭建

一、Linux # 安装 PostgreSQL 15 仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 安装之前先确认是否已经存在PostgreSQL rpm -qa | grep postgres# 如果存在&#xff0…...

Unity UGUI Button事件流程

场景结构 测试代码 public class TestBtn : MonoBehaviour {void Start(){var btn GetComponent<Button>();btn.onClick.AddListener(OnClick);}private void OnClick(){Debug.Log("666");}}当添加事件时 // 实例化一个ButtonClickedEvent的事件 [Formerl…...

Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析

Java求职者面试指南&#xff1a;Spring、Spring Boot、Spring MVC与MyBatis技术解析 一、第一轮基础概念问题 1. Spring框架的核心容器是什么&#xff1f;它的作用是什么&#xff1f; Spring框架的核心容器是IoC&#xff08;控制反转&#xff09;容器。它的主要作用是管理对…...