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

【牛客网C语言刷题合集】(四)

🌟菜鸟主页:@晨非辰的主页

  👀学习专栏:《C语言刷题集》

💪学习阶段:C语言方向初学者

名言欣赏:"学习不是填满一桶水,而是点燃一把火。"


1.  有序序列合并

--题目链接:有序序列合并_牛客网


  解题思路——

--对于变量,数组……准备工作,小子就不多bb了; 直接看结构

  • 大体结构

        -- 首先想到进行有序合并就要比较大小,这里需要选择语句:用下标访问元素,遍历俩数组元素并大小;

                --说到遍历就需要循环结构,因为可以判断循环条件比较简单:只要避免数组越界即可;所以使用while结构;

        -- 再者,往前看,输入数组元素时,俩数组长度同样长的概率较小,一般是合并完一个数组,就要着手打印另个数组的剩余元素;      

                --这时要判断是哪个数组有身剩余:选择语句,条件也简单:下标未达到数组长度-1


#include <stdio.h>
int main()
{int n = 0;int m = 0;scanf("%d%d", &n, &m);//检查输入是否正确if (n < 1 || n > 1000 || m < 1 || m > 1000) {printf("n和m的范围应为1到1000。\n");return 1;}int arr1[1000] = { 0 };int arr2[1000] = { 0 };//数组arr1输入升序数组for (int i = 0; i < n; i++){scanf("%d", &arr1[i]);//检查数组元素输入if (arr1[i] < 0 || arr1[i] > 30000) {printf("arr1[%d]超出范围!\n", i);return 1;}}//数组arr2输入升序数组for (int j = 0; j < m; j++){scanf("%d", &arr2[j]);//检查数组元素输入if (arr1[j] < 0 || arr1[j] > 30000) {printf("arr1[%d]的值超出范围!\n", j);return 1;}}//开始遍历数组,进行合并int i = 0;int j = 0;while (i < n && j < m){if (arr1[i] < arr2[j]){printf("%d ", arr1[i]);i++;}else{printf("%d ", arr2[j]);j++;}}//数组arr1若有剩余元素while (i < n){printf("%d ", arr1[i]);i++;}//数组arr2若有剩余元素while (j < m){printf("%d ", arr2[j]);j++;}return 0;
}

--上面代码是判断小的先打印,当然也有先打印大的,只不过在后程进行逆序打印整体效率低(自己体会吧):

int main()
{int n = 0;int m = 0;scanf("%d%d", &n, &m);int arr1[100] = { 0 };int arr2[100] = { 0 };int arr3[200] = { 0 };//数组arr1输入升序数组for (int i = 0; i < n; i++){scanf("%d", &arr1[i]);}//数组arr2输入升序数组for (int j = 0; j < m; j++){scanf("%d", &arr2[j]);}int i = n - 1;int j = m - 1;int k = n + m -1;while (i >= 0 && j >=0){if (arr2[j] >= arr1[i]){arr3[k] = arr2[j];j--;k--;}else{arr3[k] = arr1[i];i--;k--;}}// 处理剩余元素while (i >= 0) {arr3[k--] = arr1[i--];}while (j >= 0) {arr3[k--] = arr2[j--];}//打印arr3for (k = 0; k < n+m; k++){printf("%d ", arr3[k]);}return 0;
}

--补充:return 1; 的作用

(对于上面的return语句,小子在这里有点补充要加)

--先说明:当代码执行到 return 1; 时,程序会立即终止,并返回状态码 1 给操作系统(表示异常退出)。

--这是可能会想,1不是表示为真嘛!怎么会异常退出!

        --哎,你的问题非常好!这里确实存在一个容易混淆的概念:

--在逻辑判断中(如 if 条件)

  • 1 表示 逻辑真(true);

  • 0 表示 逻辑假(false);

--在 return 语句中(程序退出状态):

  • return 0; 表示 程序成功执行约定俗成);

  • return 1;(或其他非零值)表示 程序异常终止(错误码);

--所以输入合法性检查可以使用 return 1; :

        --当用户输入不符合要求时(如超出范围、格式错误),终止程序并提示


结语:本篇内容收录在《C语言刷题集》中,本篇分享的是分支循环语句与数组综合运用的练习,难度稍有,一定程度上能够有效提升编程能力,喜欢的朋友们,三连后一起来学习吧!!!

http://www.dtcms.com/a/301552.html

相关文章:

  • Java类加载器与双亲委派模型
  • n8n “Run Once for All Items“和“Run Once for Each Item“区别
  • 深度学习中的计算图与自动微分原理:静态图与动态图的实现差异
  • sd Function 学习笔记
  • BeautifulSoup 使用详解与实战示例
  • WAIC 2025 热点解读:如何构建 AI 时代的“视频神经中枢”?
  • WordPress 网站中的“mu-plugins”隐藏后门
  • [每周一更]-(第152期):Go中的CAS(Compare-And-Swap)锁原理详解
  • Java面试宝典:MySQL性能优化
  • ES6模块详解:核心语法与最佳实践
  • 编码器和解码器风格的Transformer架构
  • 使用vue2和 element-ui 做一个点餐收银台系统前端静态项目
  • 数据江湖的“三国演义”:数据仓库、数据湖与湖仓一体的全景对比
  • Gradio全解8——ChatInterfaceChatbot:聊天界面类与聊天机器人(4)——返回复杂响应与直接修改Chatbot值
  • Java Ai(day03)
  • 【秋招笔试】7月26日科大讯飞秋招第一题
  • 【最新最完整】SpringAI-1.0.0开发MCP Server,搭建MCP Client 实战笔记(进阶+详细+完整代码)
  • AI Agent学习
  • MyBatis-Plus IService 接口全量方法实现与测试(续)
  • 【c++】从 “勉强能用” 到 “真正好用”:中文问答系统的 200 行关键优化——关于我用AI编写了一个聊天机器人……(16)
  • 中级全栈工程师笔试题
  • DP之背包基础
  • 详解力扣高频SQL50题之180. 连续出现的数字【困难】
  • CPA会计-5- 投资性房地产
  • 逆向入门(42)程序逆向篇-riijj_cm_20041121
  • 生态环境大数据技术专业的深度解析
  • 物理实验仿真平台设计与实现(抛体运动与电磁场交互)
  • 构建可扩展的状态系统:基于 ArkTS 的模块化状态管理设计与实现
  • MPI环形AllReduce算法实现与深度解析
  • lombok插件@NoArgsConstructor、@AllArgsConstructor、@RequiredArgsConstructor的区别