C语言编程练习
考点:【字符串】【数组】
题目1. 打印X
题目描述
输入一个正整数N, 你需要按样例的方式返回一个字符串列表。
1≤N≤15。
样例 1:
输入:1
输出:[“X”]
X
样例 2:
输入:2
[“XX”, “XX”]
XX
XX
样例 3:
输入:3
[“X X”, " X ", “X X”]
X XX
X X
样例 4:
输入:4
[“X X”, " XX ", " XX ", “X X”]
理解成图案:
X X XX XX
X X
解题代码如下:
#include <stdio.h>
#include <stdlib.h>char** generatePattern(int N) {// 分配字符串列表的内存空间char** pattern = (char**)malloc(N * sizeof(char*));// 为每个字符串分配内存空间for (int i = 0; i < N; i++) {pattern[i] = (char*)malloc((N+1) * sizeof(char));}// 构建字符串列表for (int i = 0; i < N; i++) {for (int j = 0; j < N; j++) {if (j == i || j == (N - i - 1)) {pattern[i][j] = 'X';}else {pattern[i][j] = ' ';}}pattern[i][N] = '\0'; // 字符串末尾添加结束符}return pattern;
}int main() {int N;printf("请输入一个正整数N:");scanf_s("%d", &N);char** pattern = generatePattern(N);// 输出字符串列表for (int i = 0; i < N; i++) {printf("%s\n", pattern[i]);}// 释放内存空间for (int i = 0; i < N; i++) {free(pattern[i]);}free(pattern);return 0;
}
- 备注:其实也可以构建一个数组,让其先初始化全是’ ‘空格,然后在对称的idx和N-idx-1改写成’X’。
题目2. 最长和谐子序列
题目描述
- 我们将一个和谐数组定义为是其最大值和最小值之间的差值恰好为1的数组。现在,给定一个整数数组,您需要在其所有可能的子序列中找到其最长的和谐子序列的长度。
- 示例:
输入:[1,3,2,2,5,2,3,7]
输出:5
解释:最长的和谐子序列是[3,2,2,2,3]。
解题思路
- 先将数组排序,然后再进行相近元素进行比较,统计两数之差小于等于1的元素个数,不停更新这种元素的个数,直达找到最大长度。
解题代码
#include <stdio.h>
#include <stdlib.h>// 比较函数,用于排序
int cmpFunc(const void* a, const void* b)
{return (*(int*)a - *(int*)b); //升序
}int findLHS(int* nums, int numsSize)
{int maxLen = 0;// 对数组进行排序qsort(nums, numsSize, sizeof(int), cmpFunc);for (int i = 0; i < numsSize; i++){int count = 1;int j = i + 1;// 计算当前数字和后续数字之间的差值while (j < numsSize && nums[j] - nums[i] <= 1){if (nums[j] == nums[i] || nums[j] == nums[i] + 1){count++;}j++;}// 更新最大长度if (count > maxLen){maxLen = count;}}return maxLen;
}int main()
{int nums[] = { 1, 3, 2, 2, 5, 2, 3, 7 };int numsSize = sizeof(nums) / sizeof(nums[0]);int maxLength = findLHS(nums, numsSize);printf("最长的和谐子序列的长度为:%d\n", maxLength);return 0;
}
- 备注:代码用到stdlib.h中的qsort排序函数。函数原型如下:
void qsort(void *base, size_t num, size_t size,
int (*compar)(const void *, const void *));
//其中入参4:
int (*compar)(const void *a, const void *b)
{return (*(int *)a) - *(int *)b)); //升序//return (*(int *)b) - *(int *)a)); //降序//该函数注意点:首先void *需要先强制转成待比较的数据类型才行,比如如下:return (*(double *)a) - *(double *)b) > 0 ? 1 : - 1); //升序
}
void *base
: 一个指向要排序的数组或对象的指针,即数组的首地址或对象的地址。size_t num
: 数组中元素的数量。size_t size
: 数组中每个元素的大小,以字节为单位。int (*compar)(const void *, const void *)
: 指向比较函数的指针。该函数用于定义元素之间的比较规则,并返回一个整数值表示比较结果。该比较函数接受两个指向元素的指针,并返回一个负整数、零或正整数来表示第一个元素小于、等于或大于第二个元素。
题目3. 用C语言实现快速排序
算法描述
- 用C语言实现对一个数组进行快速排序
解题代码
#include <stdio.h>// 快速排序函数
void quickSort(int arr[], int low, int high) {if (low < high) {int pivot = arr[low]; //选取数组第一个元素作为基准值int i = low, j = high;while (i < j) {// 从右向左找小于基准值的元素while (i < j && arr[j] >= pivot)j--;if (i < j)arr[i++] = arr[j];// 从左向右找大于基准值的元素while (i < j && arr[i] <= pivot)i++;if (i < j)arr[j--] = arr[i];}arr[i] = pivot; // 将基准值放入中间位置// 递归排序基准值左边和右边的子数组quickSort(arr, low, i - 1);quickSort(arr, i + 1, high);}
}int main() {int arr[] = {7, 9, 1, 6, 3, 2};int size = sizeof(arr) / sizeof(arr[0]);printf("原始数组:");for (int i = 0; i < size; i++)printf("%d ", arr[i]);printf("\n");quickSort(arr, 0, size - 1);printf("排序后数组:");for (int i = 0; i < size; i++)printf("%d ", arr[i]);printf("\n");return 0;
}
- 运行结果:
原始数组:7 9 1 6 3 2
排序后数组:1 2 3 6 7 9
相关文章:

C语言编程练习
考点:【字符串】【数组】 题目1. 打印X 题目描述 输入一个正整数N, 你需要按样例的方式返回一个字符串列表。 1≤N≤15。 样例 1: 输入:1 输出:[“X”] X样例 2: 输入:2 [“XX”, “XX”] …...

vue入门(增查改!)
<template><div><!-- 搜索栏 --><el-card id"search"><el-row><el-col :span"20"><el-input v-model"searchModel.name" placeholder"根据名字查询"></el-input><el-input v-mode…...

移动端身份证识别技术的应用,告别手动录入证件信息
随着移动互联网的的发展,越来越多的公司都推出了自己的移动APP,这些APP多数都涉及到个人身份证信息的输入认证(即实名认证),如果手动去输入身份证号码和姓名,速度非常慢,且用户体验非常差。为了…...

网络通信原理TCP字段解析(第四十七课)
字段含义Source Port(源端口号)源端口,标识哪...

uniapp微信小程序消息订阅快速上手
一、微信公众平台小程序开通消息订阅并设置模板 这边的模板id和详细内容后续前后端需要使用 二、uniapp前端 需要是一个button触发 js: wx.getSetting({success(res){console.log(res)if(res.authSetting[scope.subscribeMessage]){// 业务逻辑}else{uni.request…...
MySQL 根据多字段查询重复数据
MySQL 根据多字段查询重复数据 在实际的数据库应用中,我们经常需要根据多个字段来查询重复的数据。MySQL 提供了一些方法来实现这个功能,让我们能够快速准确地找到和处理重复数据。本文将介绍如何使用 MySQL 来根据多字段查询重复数据,并提供…...

Markdown编辑器 Mac版Typora功能介绍
Typora mac是一款跨平台的Markdown编辑器,支持Windows、MacOS和Linux操作系统。它具有实时预览功能,能够自动将Markdown文本转换为漂亮的排版效果,让用户专注于写作内容而不必关心格式调整。 Typora Mac版除了支持常见的Markdown语法外&#…...

el-form自定义校验规则
Vue 的 el-form 组件可以使用自定义校验规则进行表单验证。自定义校验规则可以通过传递一个函数来实现,该函数接受要校验的字段的值作为参数,并返回一个布尔值或一个 Promise 对象。 下面是一个示例,演示如何在 el-form 中使用自定义校验规则…...

xml对象与字符串互换
很多老系统,特别是C的系统,可能数据结构采用的xml。xml对java来说没有什么,但是C来说,可能还有个顺序问题,毕竟c没有那么多通用类库。 2 xstream 先说依赖,我本来不想升级,但是有个问题卡者就给…...

单例模式和多例模式和工厂模式
1单例设计模式 学习目标 能够使用单例设计模式设计代码 内容讲解 正常情况下一个类可以创建多个对象 public static void main(String[] args) {// 正常情况下一个类可以创建多个对象Person p1 new Person();Person p2 new Person();Person p3 new Person(); }如果说有…...
【网络架构】华为hw交换机网络高可用网络架构拓扑图以及配置
一、网络拓扑 1.网络架构 核心层:接入网络----路由器 汇聚层:vlan间通信 创建vlan ---什么是vlan:虚拟局域网,在大型平面网络中,为了实现广播控制引入了vlan,可以根据功能或者部门等创建vlan,再把相关的端口加入到vlan.为了实现不用交换机上的相同vlan通信,需要配置中继,为了…...

信也科技一面凉经
1.在项目经历里挑一个详细介绍一下 项目的应用场景 2.项目里用到多线程是怎么用的?回答:线程池 用通过 ThreadPoolExecutor 构造函数的方式创建的线程池 3.线程池有哪些重要参数?回答:核心线程数、最大线程数、阻塞队列类型、…...

AI商业化如何落地?看设计师如何利用AI细化工作流
自从AI爆火之后,人类是否会被AI取代一直都是打工人格外关注的问题。 而最近,在小编深入探索到我们用户的使用情况后,发现已经有人拿神采PromeAI直接实现了商业应用,将AI的设计创意应用得淋漓尽致,并且直接进军房地产及…...

论文阅读 - Understanding Diffusion Models: A Unified Perspective
文章目录 1 概述2 背景知识2.1 直观的例子2.2 Evidence Lower Bound(ELBO)2.3 Variational Autoencoders(VAE)2.4 Hierachical Variational Autoencoders(HVAE) 3 Variational Diffusion Models(VDM)4 三个等价的解释4.1 预测图片4.2 预测噪声4.3 预测分数 5 Guidance5.1 Class…...

[Python进阶] 定制类:模拟篇
4.10.5 模拟篇 4.10.5.1 call 通过__call__魔法方法可以像使用函数一样使用对象。通过括号的方式调用,也可以像函数一样传入参数: from icecream import icclass Multiplier:def __init__(self, mul):self.mul muldef __call__(self, arg):return se…...

HTML5 游戏开发实战 | 五子棋
01、五子棋游戏设计的思路 在下棋过程中,为了保存下过的棋子的信息,使用数组 chessData。chessData[x][y]存储棋盘(x,y)处棋子信息,1 代表黑子,2 代表白子,0…...

rust学习-json的序列化和反序列化
由于 serde 库默认使用 JSON 格式进行序列化和反序列化 因此程序将使用 JSON 格式对数据进行序列化和反序列化 社区为 Serde 实现的部分数据格式列表: JSON:广泛使用的 JavaScript 对象符号,用于许多 HTTP APIPostcard:no_std 和嵌入式系统友好的紧凑二进制格式。CBOR:用…...

基于MapReduce的Hive数据倾斜场景以及调优方案
文章目录 1 Hive数据倾斜的现象1.1 Hive数据倾斜的场景1.2 解决数据倾斜问题的优化思路 2 解决Hive数据倾斜问题的方法2.1 开启负载均衡2.2 引入随机性2.3 使用MapJoin或Broadcast Join2.4 调整数据存储格式2.5 分桶表、分区表2.6 使用抽样数据进行优化2.7 过滤倾斜join单独进行…...

mysql 02 数据库的约束
为防止错误的数据被插入到数据表,MySQL中定义了一些维护数据库完整性的规则;这些规则常称为表的约束。常见约束如下: 主键约束 主键约束即primary key用于唯一的标识表中的每一行。被标识为主键的数据在表中是唯一的且其值不能为空。这点类似…...
Quivr 基于GPT和开源LLMs构建本地知识库 (更新篇)
一、前言 自从大模型被炒的越来越火之后,似乎国内涌现出很多希望基于大模型构建本地知识库的需求,大概在5月底的时候,当时Quivr发布了第一个0.0.1版本,第一个版本仅仅只是使用LangChain技术结合OpenAI的GPT模型实现了一个最基本的…...

Unity如何制作声音控制条(控制音量大小)
一:UGUI制作 1. 首先在【层级】下面创建UI里面的Slider组件。设置好它对应的宽度和高度。 2.调整Slider滑动条的填充颜色。一般声音颜色我黄色,所以我们也调成黄色。 我们尝试滑动Slider里面的value。 a.滑动前。 b.滑动一半。 c.滑动完。 从以上滑动va…...

非计算机科班如何顺利转行计算机领域?
文章目录 每日一句正能量前言如何规划才能实现转计算机?计算机岗位发展前景?现阶段转计算机的建议后记 每日一句正能量 改变思路,改变习惯,改变一种活的方式,往往会创造无限,风景无限! 前言 近年…...

Android音视频剪辑器自定义View实战!
Android音视频剪辑器自定义View实战! - 掘金 /*** Created by zhouxuming on 2023/3/30** descr 音视频剪辑器*/ public class AudioViewEditor extends View {//进度文本显示格式-数字格式public static final int HINT_FORMAT_NUMBER 0;//进度文本显示格式-时间…...

stm32_ADC电源、通道、工作模式
0、ADC功能框图 1、ADC的电源 1.1、工作电源 VSSAVSS,VDDAVDD,简单来说,通常stm32是3.3V,ADC的工作电源也是3.3V; 1.2、参考电压 VREF和VREF-并不一定引出,取决于封装,如果没有引出则VREF连接到…...

Vue编程式路由导航
目录 一、使用 一、使用 不使用<router-link>标签,利用$router中的api实现跳转,更灵活 <template><div><ul><li v-for"m in messageList" :key"m.id"><!-- 跳转路由并携带params参数,…...

LVS-DR模式
目录 1、概述 2、LVS-DR模式的工作原理: 3、在LVS-DR模式下,数据包的流向分析如下: 4、LVS-DR是一种用于构建高可用性负载均衡集群的技术模式。LVS-DR模式具有以下特点: 5、LVS-DR中的ARP问题 6、配置LVS-DR需要以下几个关键…...

详细介绍生成对抗网络 (GAN) 的原理和基于Pytorch源码的实现
介绍 GAN 是一种使用 CNN(卷积神经网络)等深度学习方法进行生成建模的方法。生成建模是一种无监督学习方法,涉及自动发现和学习输入数据中的模式,以便该模型可用于从原始数据集中生成新示例。 GAN 是一种通过将问题构建为具有两个子模型的监督学习问题来训练生成模型的方…...

高性能数据处理选型
1、Redis(高性能) 2、Elasticsearch/HBase( 大数据 ) 3、MongoDB(海量数据)...

【深入理解C语言】-- 关键字2
🐇 🔥博客主页: 云曦 📋系列专栏:深入理解C语言 💨吾生也有涯,而知也无涯 💛 感谢大家👍点赞 😋关注📝评论 文章目录 前言一、关键字 - static&…...

Java进阶(3)——手动实现ArrayList 源码的初步理解分析 数组插入数据和删除数据的问题
目录 引出手动实现ArrayList定义接口MyList<T>写ArrayList的实现类增加元素删除元素 写测试类进行测试数组插入数据? 总结 引出 1.ArrayList的结构分析,可迭代接口,是List的实现; 2.数组增加元素和删除元素的分析,何时扩容…...