C语言好好题(一维数组)

两天没有更新了,贴纸们,有没有想我呀。😄😄😄

好了,就寒暄到这里吧,下面请看题:

有序序列判断

输入一个整数序列,判断是否是有序序列,有序,指序列中的整数从小到大排序或者从大到小排序(相同元素也视为有序

输入描述:

第一行输入一个整数N(3≤N≤50)。

第二行输入N个整数,用空格分隔N个整数。

输出描述:

输出为一行,如果序列有序输出sorted,否则输出unsorted。

判断是否为有序序列,可能是升序还可能是降序,所以我们就可以设计一个函数来判断是不是有序序列,那么我们怎么实现呢?首先我们假设是升序的,那么我们就以这个条件进去,然后以某一个值为有序状态,然后我们再里面进行判断,如果有相反情况,那么我们就改变刚才假设有序状态的值,改为无序状态。之后我们再在主函数中,根据返回的值进行判断有序还是无序!:

int sort(int arr[], int n)
{if (arr[0] >= arr[1]){int flag = 0;//假设flag为0的时候为有序状态for (int j = 0; j < n - 1; j++){if (arr[j] < arr[j + 1]){flag = 1;//因为我们前面假设的是升序,这里前一位大于后一位的话,就不是有序                //  状态了,那么此时我们就变为无序状态}}return flag;}else {int flag = 0;for (int j = 0; j < n - 1; j++){if (arr[j] > arr[j + 1]){flag = 1;}}return flag;}
}

主函数里,我们就很好写了:

int sort(int arr[], int n)
{if (arr[0] >= arr[1]){int flag = 0;for (int j = 0; j < n - 1; j++){if (arr[j] < arr[j + 1]){flag = 1;}}return flag;}else {int flag = 0;for (int j = 0; j < n - 1; j++){if (arr[j] > arr[j + 1]){flag = 1;}}return flag;}
}int main()
{int n = 0;scanf("%d", &n);int arr[50];for (int i = 0; i < n; i++){scanf("%d",&arr[i]);}int ret = sort(arr, n);//根据返回的值进行判断是否有序if (ret == 1){printf("unsorted");}else{printf("sorted");}return 0;
}

我们来看看运行结果:


有序序列插入一个整数

有一个有序数字序列,从小到大排序,将一个新输入的数插入到序列中,保证插入新数后,序列仍然是升序。

输入描述:

第一行输入一个整数N(0≤N≤50)。

第二行输入N个升序排列的整数,输入用空格分隔的N个整数。

第三行输入想要进行插入的一个整数。

输出描述:

输出为一行,N+1个有序排列的整数。

插入一个数到升序序列中,而且保证插入后还是一个升序序列!怎么想这道题呢?这里的要求是插入一个数,那么我们一个数有一个数的做法,有一些是两个有序序列进行排序!那么我们很容易想到用这个数字与这个序列进行比较,如果小于这个数,那么我们就打印我们的原序列的数,如果大于我们这个数,那我们此时就是打印我们的目标数,那么现在我们就以这个思路去实现我们的代码:

int main()
{int n = 0;scanf("%d", &n);int arr[50];for (int i = 0; i < n; i++){scanf("%d", &arr[i]);}int num = 0;scanf("%d", &num);for (int i = 0; i < n; i++){if (arr[i] < num){printf("%d ", arr[i]);}else{printf("%d ", num);}	}return 0;
}

此时我们来看看运行的结果:

 我们根据运行的结果可以看出,当我们找到插入数的位置后,我们之后的数都是打印的是我们的插入的那个数。那么此时我们可以想,那当我们的插入数插到属于它自己的位置时,此时我们就不回去循环了。我们可以重新写一个循环呀,打印原序列后面的数不就好了嘛,我们打印完后,我们就跳出整个循环!:

int main()
{int n = 0;scanf("%d", &n);int arr[50];for (int i = 0; i < n; i++){scanf("%d", &arr[i]);}int num = 0;scanf("%d", &num);for (int i = 0; i < n + 1; i++)//因为我们插入了一个数,所以多了一次循环{if (arr[i] < num){printf("%d ", arr[i]);}else{printf("%d ", num);//因为是插入一个,所以我们就打印之后的序列的数就好了。for (int j = i; j < n; j++){printf("%d ", arr[j]);}break;//打印完后跳出整个循环就over了!}}return 0;
}

 我们来看看此时的运行结果:


序列中删除指定数字

有一个整数序列(可能有重复的整数),现删除指定的某一个整数,输出删除指定数字之后的序列,序列中未被删除数字的前后位置没有发生改变。

输入描述:

第一行输入一个整数(0≤N≤50)。

第二行输入N个整数,输入用空格分隔的N个整数。

第三行输入想要进行删除的一个整数。

输出描述:

输出为一行,删除指定数字之后的序列。

序列中删除指定的数字,而且可能序列中有相同的整数,那么也可能是相邻的相同的数。那么我们还是要与序列中的数进行比较,如果不相同的话,那么我们就打印出序列中的数。如果相同的话,我们就删除序列中的数:

int main()
{int n = 0;scanf("%d", &n);int arr[50];for (int i = 0; i < n; i++){scanf("%d", &arr[i]);}int num = 0;scanf("%d", &num);for (int i = 0; i < n; i++){if (arr[i] > num || arr[i]<num){printf("%d ", arr[i]);}	else{}}return 0;
}

此时我们的问题是怎样删除我们的数,那我们可以由后面一位数来替代该位需要删除的数:

arr[i] = arr[i + 1];

而且还要注意可能有相邻的相同的数!那么我们在序列中的数与该数相同时我们是不是还应该弄一个循环,判断是否有相邻的相同数,直到不相等了,我们才跳出去!

while (arr[i] == arr[i + 1])
{arr[i] = arr[i + 1];i++;
}

我们来看看整体的代码:

int main()
{int n = 0;scanf("%d", &n);int arr[50];for (int i = 0; i < n; i++){scanf("%d", &arr[i]);}int num = 0;scanf("%d", &num);for (int i = 0; i < n; i++){if (arr[i] > num || arr[i]<num){printf("%d ", arr[i]);}	else{while (arr[i] == arr[i + 1]){arr[i] = arr[i + 1];i++;}}}return 0;
}

我们来看看运行的结果:

 我们来梳理一下该过程:假设序列不等于要删除的数,我们就直接打印该序列中的数就可以了,如果等于该序列的数,我们先判断有没有相邻的相同的数,如果没有,那么我们就不用执行,这一位就不用打印,就直接跳到上面for循环给i++,跳到下一位进行判断!如果有相邻相同的,我们就进入while循环,把后一位的值赋值给前一位,然后i++,直到不相等为止!假设我们有两位相邻的,那么我们的while循环就执行了一次,i就加了一次,然后到上面for循环处还要加一次,总共加了我们的两次,就是跳过我们的这两位咯,你懂了吗?学会了?还是学废了?哈哈,如果还是不太懂的话,可以自己去调试哦!


序列中整数去重

输入n个整数的序列,要求对这个序列进行去重操作。所谓去重,是指对这个序列中每个重复出现的整数,只保留该数第一次出现的位置,删除其余位置。

输入描述:

输入包含两行,第一行包含一个正整数n(1 ≤ n ≤ 1000),表示第二行序列中数字的个数;第二行包含n个整数(范围1~5000),用空格分隔。

输入描述:

输出为一行,按照输入的顺序输出去重之后的数字,用空格分隔。

序列中整数的去重,且保留该数第一次出现的位置。哇,这题是一道比一道变态啊!😵😵😵

既然序列中的每一个元素都要去看的话,那么我们就拿出第一位去和后面的每一位进行比较,看看后面有没有,如果有那么我们就删除或者向上面那样的跳过,第一位比较完后,我们接着要拿出第二位去与后面的进行比较了,既然怎样的话,那么我们还是可以写出下面的代码的:

int main()
{int n = 0;scanf("%d", &n);int arr[1000];for (int i = 0; i < n; i++){scanf("%d", &arr[i]);}for (int i = 0; i < n; i++){for (int j = i+1; j < n; j++){if (arr[i] == arr[j]){//待思考的内容}}}return 0;
}

既然它要删除的话,那就是我们的跳过或者移位,如果跳过的话,那么我们再双重循环里面又该怎样打印?那么我们就先选择一位看看,把后面的那一位移到这一位来,就把后面的整体像前面移一位。移动完后,我们再接着从后面一位进行排查,如果还有我们又接着移,直到排查完毕!这个思路好像可以勒哈。那么我们移动一整次,是不是我们的n就要减少一次呢,因为我们移动了之后就会减少一位嘛,所以n应该减减。但是我们此时还要注意一个问题,我们的j也应该减减,因为再我们下一次判断下一位时,是从删除那位的位置开始排查着走的,因为我们到上面for循环去的话,j还要加加,所以我们这里j还要减减!

int main()
{int n = 0;scanf("%d", &n);int arr[1000];for (int i = 0; i < n; i++){scanf("%d", &arr[i]);}for (int i = 0; i < n; i++){for (int j = i+1; j < n; j++){if (arr[i] == arr[j]){for (int a = j; a < n - 1; a++){arr[a] = arr[a + 1];}n--;j--;}}}for (int i = 0; i < n; i++){printf("%d ", arr[i]);}return 0;
}

我们来看看运行结果:

 今天就到这里了,拜拜了,好梦!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/160215.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

腾讯云轻量4核8G12M带宽服务器租用价格和S5实例报价

腾讯云4核8G服务器优惠价格表&#xff0c;云服务器CVM标准型S5实例4核8G配置价格15个月1437.3元&#xff0c;5年6490.44元&#xff0c;轻量应用服务器4核8G12M带宽一年446元、529元15个月&#xff0c;阿腾云atengyun.com分享腾讯云4核8G服务器详细配置、优惠价格及限制条件&…

C++(模板进阶)

目录 前言&#xff1a; 本章学习目标&#xff1a; 1.非类型模版参数 1.1使用方法 1.2注意事项 1.3 实际引用 2.模版特化 2.1概念 2.2函数模板特化 2.3类模板特化 2.3.1全特化 2.3.2偏特化 3.模版分离编译 ​编辑 3.1失败原因 ​编辑 3.2解决方案 4 总结 前言&…

【C++】类和对象——构造函数和析构函数

今天要学习两个特殊的函数&#xff0c;分别是构造函数和析构函数&#xff0c;它们究竟有什么用呢&#xff1f; 比如说&#xff0c;我们先写一个简单的日期的类 class Date { public:void Init() {_year 1;_month 1;_day 1;}void Print() {cout << _year << &qu…

如何去开发一个springboot starter

如何去开发一个springboot starter 我们在平时用 Java 开发的时候&#xff0c;在 pom.xml 文件中引入一个依赖就可以很方便的使用了&#xff0c;但是你们知道这是如何实现的吗。 现在我们就来解决这一个问题&#xff01; 创建 SpringBoot 项目 首先我们要做的就是把你想要给别…

centos7安装MySQL—以MySQL5.7.30为例

centos7安装MySQL—以MySQL5.7.30为例 本文以MySQL5.7.30为例。 官网下载 进入MySQL官网&#xff1a;https://www.mysql.com/ 点击DOWNLOADS 点击链接&#xff1b; 点击如上链接&#xff1a; 选择对应版本&#xff1a; 点击下载。 安装 将下载后的安装包上传到/usr/local下…

CTF靶场搭建及Web赛题制作与终端docker环境部署

♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ 写在前面 ╔═══════════════════════════════════════════════════…

使用ChatGPT创建Makefile构建系统:使用Make运行Docker

使用ChatGPT创建Makefile构建系统&#xff1a;使用Make运行Docker 芯语芯愿&#xff08;知乎/纷传/CSDN/&#xff09;&#xff1b;小石头的芯语芯愿&#xff08;微信公众号&#xff09; 开发高效现代的构建系统对于满足开发周期需求至关重要。原先&#xff0c;嵌入式开发者一…

Unity 场景烘培 ——LensFlare镜头光晕(三)

提示&#xff1a;文章有错误的地方&#xff0c;还望诸位大神指出&#xff01; 文章目录 前言一、镜头光晕 (Lens Flares)是什么&#xff1f;二、使用Lens Flares组件总结 前言 一般情况下都会忽略的东西&#xff0c;镜头光晕。理论上不加镜头光晕&#xff0c;也不会有什么影响…

vue3的两个提示[Vue warn]: 关于组件渲染和函数外部使用

1. [Vue warn]: inject() can only be used inside setup() or functional components. 这个消息是提示我们&#xff0c;需要将引入的方法作为一个变量使用。以vue-store为例&#xff0c;如果我们按照如下的方式使用&#xff1a; import UseUserStore from ../../store/module…

RabbitMQ快速入门(简单收发消息)

文章目录 前言一、数据隔离1.用户管理2.virtual host 二、控制台收发1.交换机2.队列3.绑定 三、编程式收发1.依赖和配置2.收发信息 总结 前言 1.了解数据隔离 2.RabbitMQ控制台收发信息 3.SpringBoot整合RabbitMQ收发信息 一、数据隔离 1.用户管理 点击Admin选项卡&#xff0…

依赖库:Ceres-solver-2.0.0安装

依赖库&#xff1a;Ceres-solver-2.0.0安装 前言安装ceres-solver-2.0.0验证 前言 Ceres Solver是谷歌开源的C非线性优化库&#xff0c;能够解决有约束或无约束条件下的非线性最小二乘问题。2010年之后大量的运用在谷歌的产品开发中&#xff0c;尤其在谷歌开源的cartographer中…

sonar对webgoat进行静态扫描

安装sonar并配置 docker安装sonarqube&#xff0c;sonarQube静态代码扫描 - Joson6350 - 博客园 (cnblogs.com) 对webgoat进行sonar扫描 扫描结果 bugs Change this condition so that it does not always evaluate to "false" 意思是这里的else if语句不会执行…

“我,24岁,年薪20万”:选对了行业究竟多重要?

那些在职场上顺风顺水&#xff0c;按部就班拿到高薪的人都有什么特点&#xff1f; 今天的主人公Flee告诉我&#xff0c;是稳。 在她的故事里&#xff0c;我看到一个“别人家的姑娘”&#xff0c;是怎样在职场上稳步晋升&#xff0c;大学毕业仅2年&#xff0c;就拿到18.6K月薪&a…

2022年12月 Scratch(二级)真题解析#中国电子学会#全国青少年软件编程等级考试

Scratch等级考试(1~4级)全部真题・点这里 一、单选题(共25题,每题2分,共50分) 第1题 一个骰子,从3个不同角度看过去的点数如图所示,请问5的对面是什么点数?( ) A:1 B:3 C:4 D:6 答案:A 根据图三,用右手定则,大拇指朝上指向6所对的方向,其余四指握起来…

目标检测框存在内嵌情况分析与解决

这里写目录标题 问题描述原因分析与解决方法&#xff1a;后续及思考参考文档 问题描述 目标检测模型输出的检测框存在内嵌情况。 原因分析与解决方法&#xff1a; 根据经验&#xff0c;第一感觉是后处理nms部分出了问题。来看下对应的代码&#xff1a; static float CalcIou…

通过对比 入库申请->入库审核流程 与 直接入库 代码实现,解决前者误修改stock_info表is_in=1或2数据的bug

入库申请->入库审核流程&#xff1a; 提交按键定义位置&#xff1a;src\views\purchase\rurchase\RurchaseAdd.vue <a-button click"handleSubmit" type"primary" :loading"loading">确认物品已入库</a-button> <template&…

二、类与对象(二)

8 this指针 8.1 this指针的引入 我们先来定义一个日期的类Date&#xff1a; #include <iostream> using namespace std; class Date { public:void Init(int year, int month, int day){_year year;_month month;_day day;}void Print(){cout << _year <&l…

Python BDD之Behave测试报告

behave 本身的测试报告 behave 本身提供了四种报告格式&#xff1a; pretty&#xff1a;这是默认的报告格式&#xff0c;提供颜色化的文本输出&#xff0c;每个测试步骤的结果都会详细列出。plain&#xff1a;这也是一种文本格式的报告&#xff0c;但没有颜色&#xff0c;并且…

电动汽车充放电V2G模型MATLAB代码

微❤关注“电气仔推送”获得资料&#xff08;专享优惠&#xff09; 主要内容&#xff1a; 本程序主要建立电动汽车充放电V2G模型&#xff0c;采用粒子群算法&#xff0c;在保证电动汽车用户出行需求的前提下&#xff0c;为了使工作区域电动汽车尽可能多的消纳供给商场基础负荷…

【办公常识】写好的代码如何上传?使用svn commit

首先找到对应的目录 找到文件之后点击SVN Commit