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模型实现了一个最基本的…...
css实现圆环展示百分比,根据值动态展示所占比例
代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...
练习(含atoi的模拟实现,自定义类型等练习)
一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...
JVM垃圾回收机制全解析
Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...
电脑插入多块移动硬盘后经常出现卡顿和蓝屏
当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时,可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案: 1. 检查电源供电问题 问题原因:多块移动硬盘同时运行可能导致USB接口供电不足&#x…...
MySQL用户和授权
开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务: test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...
rnn判断string中第一次出现a的下标
# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...
python报错No module named ‘tensorflow.keras‘
是由于不同版本的tensorflow下的keras所在的路径不同,结合所安装的tensorflow的目录结构修改from语句即可。 原语句: from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后: from tensorflow.python.keras.lay…...
sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!
简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求,并检查收到的响应。它以以下模式之一…...
让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比
在机器学习的回归分析中,损失函数的选择对模型性能具有决定性影响。均方误差(MSE)作为经典的损失函数,在处理干净数据时表现优异,但在面对包含异常值的噪声数据时,其对大误差的二次惩罚机制往往导致模型参数…...
在树莓派上添加音频输入设备的几种方法
在树莓派上添加音频输入设备可以通过以下步骤完成,具体方法取决于设备类型(如USB麦克风、3.5mm接口麦克风或HDMI音频输入)。以下是详细指南: 1. 连接音频输入设备 USB麦克风/声卡:直接插入树莓派的USB接口。3.5mm麦克…...
