当前位置: 首页 > 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…...

Android开发者必看:VirtualDisplay与mirrorDisplay的底层实现原理与性能优化

Android图形系统深度解析&#xff1a;VirtualDisplay与MirrorDisplay的底层架构与性能调优 在Android多屏交互与扩展显示场景中&#xff0c;VirtualDisplay和MirrorDisplay作为图形系统的核心组件&#xff0c;承担着虚拟显示设备创建与内容复制的关键功能。本文将深入SurfaceFl…...

从配准到生成:扩散模型如何革新医学图像跨模态转换

1. 医学图像跨模态转换的技术挑战 医学影像领域长期面临一个核心难题&#xff1a;如何在不同成像模态之间实现高精度转换。比如将核磁共振&#xff08;MRI&#xff09;的软组织图像转换为计算机断层扫描&#xff08;CT&#xff09;的骨骼结构图像&#xff0c;这种需求在放射治…...

2026最权威的五大AI辅助写作神器解析与推荐

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 随着人工智能技术发展得格外迅猛&#xff0c;学术领域对于AI相关论文的需求增长得越来越快。…...

利用快马平台快速构建node.js express api原型,十分钟搭建可运行后端服务

今天想和大家分享一个快速搭建Node.js后端服务的实践心得。作为一个经常需要验证想法的开发者&#xff0c;我发现用InsCode(快马)平台可以省去很多环境配置的麻烦&#xff0c;特别适合做原型开发。 为什么选择Node.jsExpress组合 Express框架是Node.js生态中最轻量灵活的Web框架…...

Android Studio中利用fat-aar实现多级依赖aar的合并打包实战

1. 为什么需要fat-aar合并打包 在Android开发中&#xff0c;我们经常会遇到这样的场景&#xff1a;你开发了一个功能模块&#xff08;比如天气组件Weather.aar&#xff09;&#xff0c;这个模块又依赖了第三方aar&#xff08;比如图表库Chart.aar&#xff09;。当你把Weather.a…...

CDA Level-2 考试全攻略:从报名到备考的保姆级教程(含最新题库资源)

CDA Level-2 考试全攻略&#xff1a;从报名到备考的保姆级教程 最近两年数据分析师认证热度持续攀升&#xff0c;CDA认证作为国内认可度较高的专业证书之一&#xff0c;Level-2考试通过率常年维持在40%左右。不同于Level-1的基础考核&#xff0c;Level-2更注重实际分析能力与统…...

LangChain实战:如何用ConversationalRetrievalQA构建带记忆的智能问答系统(附完整代码)

LangChain实战&#xff1a;构建带记忆的智能问答系统全流程解析 在当今AI应用开发领域&#xff0c;对话系统的"记忆力"已成为衡量其智能水平的关键指标。想象一下&#xff0c;当用户第三次询问"刚才提到的方案有哪些优势"时&#xff0c;如果AI回答"您…...

保姆级教程:在若依框架里给你的系统加个AI客服(通义千问+流式响应)

企业级智能客服系统集成实战&#xff1a;若依框架与通义千问的完美结合 1. 智能客服系统架构设计 在当今数字化转型浪潮中&#xff0c;智能客服已成为企业提升服务效率、降低人力成本的关键工具。基于若依框架与通义千问构建的智能客服系统&#xff0c;能够无缝集成到现有企业应…...

手把手教你用FBRT-YOLO在VisDrone数据集上跑出SOTA:从环境配置到模型推理的保姆级教程

手把手教你用FBRT-YOLO在VisDrone数据集上跑出SOTA&#xff1a;从环境配置到模型推理的保姆级教程 航拍图像目标检测一直是计算机视觉领域的难点&#xff0c;尤其是小目标检测问题。无人机拍摄的图像分辨率高、目标密集且尺寸小&#xff0c;传统检测算法往往难以兼顾精度和速度…...

灵活创建Windows安装介质:MediaCreationTool.bat的实用指南

灵活创建Windows安装介质&#xff1a;MediaCreationTool.bat的实用指南 【免费下载链接】MediaCreationTool.bat Universal MCT wrapper script for all Windows 10/11 versions from 1507 to 21H2! 项目地址: https://gitcode.com/gh_mirrors/me/MediaCreationTool.bat …...