【C语言】浙大版C语言程序设计(第三版) 练习7-4 找出不是两个数组共有的元素

前言

    最近在学习浙大版的《C语言程序设计》(第三版)教材,同步在PTA平台上做对应的练习题。这道练习题花了比较长的时间,于是就写篇博文记录一下我的算法和代码。  2024.01.03


题目

练习7-4 找出不是两个数组共有的元素

作者 张彤彧

单位 浙江大学

给定两个整型数组,本题要求找出不是两者共有的元素。

输入格式:

输入分别在两行中给出两个整型数组,每行先给出正整数N(≤20),随后是N个整数,其间以空格分隔。

输出格式:

在一行中按照数字给出的顺序输出不是两数组共有的元素,数字间以空格分隔,但行末不得有多余的空格。题目保证至少存在一个这样的数字。同一数字不重复输出。

输入样例:

10 3 -5 2 8 0 3 5 -15 9 100
11 6 4 8 2 6 -5 9 0 100 8 1

输出样例:

3 5 -15 6 4 1

思路

1.思路

一开始我总想着找线性算法,无果。后来想,这道题涉及的数据规模比较小,时间复杂度O(n^2)  也能接受。既然如此,就直接暴力求解,数组ab的元素挨个比较一遍(O(n^2)的时间复杂度就来了),只要发现有不重复的元素就打印输出。

但是题目还有一个要求,输出的元素不能重复,这就要求数组ab的本组元素之间不能重复。解决思路就是,在输入一个数组元素的时候,跟所有本组中已经存储的元素比较,如果有重复值,那么当前输入的元素就作废了,是无效值。

2.步骤

①在输入数组ab的元素时,对每一个元素都遍历本数组中已经输入的元素,查找是否有重复值,若有,则当前元素为无效值,不占用数组角标,即被下一个元素覆盖。这样得到的数组ab应该都是没有重复值的数组。
②然后,遍历数组a每一个元素,用内循环遍历数组b每个元素,查找是否有重复值,若有,则跳出内循环;若遍历完内循环仍然没有重复值,则输出a[i],即不共组元素。
③之后,遍历数组b每个元素,内循环遍历数组a每个元素,同理,输出数组b中的不共组元素。
 


代码

亲测可行,通过所有测试点!

#include<stdio.h>
int main(void){/*思路:在输入数组ab的元素时,对每一个元素都遍历本数组中已经输入的元素,查找是否有重复值,若有,则当前元素不占用数组角标,即被下一个元素覆盖。这样得到的数组ab应该都是没有重复值的数组。然后,遍历数组a每一个元素,用内循环遍历数组b每个元素,查找是否有重复值,若有,则跳出内循环;若遍历完内循环仍然没有重复值,则输出a[i],即不共组元素。之后遍历数组b每个元素,内循环遍历数组a每个元素,同理,输出数组b中的不共组元素。时间复杂度O(n^2),数据规模比较小,也能接受。*/int i,j,na,nb,ta=0,tb=0,flag,count;    //flag用于标记是否有重复值,count计数不共组元素个数//ij用于数组角标,na,nb是数组ab的元素个数,ta,tb是数组ab中本组元素重复值(即无效值)的个数int a[20],b[20];    //待处理的数组//1.输入数组a的数据scanf("%d",&na);    //输入数组a的整数个数for(i=0,ta=0;i<na;i++){        //i计数输入元素的个数,na-ta是数组a中有效元素个数scanf("%d",&a[i-ta]);    //输入编号为i的元素,存放在数组a的i-ta角标处for(j=0;j<i-ta;j++)    //内循环,遍历数组a中在此之前存储的所有元素if(a[i-ta]==a[j]){    //若发现有重复值ta++;            //则数组a中无效值(重复值)计数+1break;            //并跳出内循环,去输入下一个元素}}//这样输入得到的数组a中没有重复值,全都是有效值,角标从0到na-ta-1//2.输入数组b的数据    方法同上scanf("%d",&nb);    //输入数组b的整数个数for(i=0,tb=0;i<nb;i++){        //i计数输入元素的个数,nb-tb是数组b中有效元素个数scanf("%d",&b[i-tb]);    //输入编号为i的元素,存放在数组b的i-tb角标处for(j=0;j<i-tb;j++)    //内循环,遍历数组b中在此之前存储的所有元素if(b[i-tb]==b[j]){    //若发现有重复值tb++;            //则数组b中无效值(重复值)计数+1break;            //并跳出内循环,去输入下一个元素}}//这样输入得到的数组b中没有重复值,全都是有效值,角标从0到nb-tb-1//3.计算出数组a的不共组元素,并打印输出count = 0;                //不共组元素的个数,初始化为0for(i=0;i<na-ta;i++){        //遍历数组a中的每个元素flag = 0;                //数组a的当前元素是否与数组b中某个元素重复,默认0为不重复for(j=0;j<nb-tb;j++){        //与数组b中每个元素依次比较if(a[i]==b[j]){            //若有重复值flag = 1;        //则标记一下,有重复值 break;            //并跳出内循环,继续处理下一个数组a的元素}}if(flag == 0){        //若把数组b所有元素都比较完毕仍未发现重复值,则要输出这个不共组元素if(count==0)        //如果这是要输出的第一个元素count = 1;        //标记一下,以后的元素就不再是第一个元素了else                //如果在此之前已经有输出过元素了printf(" ");        //先输出一个空格作为分隔符printf("%d",a[i]);    //把这个不共组元素打印输出}}//4.计算出数组b的不共组元素,并打印输出    方法同上 for(i=0;i<nb-tb;i++){        //遍历数组b中的每个元素flag = 0;                //数组b的当前元素是否与数组a中某个元素重复,默认0为不重复for(j=0;j<na-ta;j++){        //与数组a中每个元素依次比较if(b[i]==a[j]){            //若有重复值flag = 1;        //则标记一下,有重复值 break;            //并跳出内循环,继续处理下一个数组b的元素}}if(flag == 0){        //若把数组a所有元素都比较完毕仍未发现重复值,则要输出这个不共组元素if(count==0)        //如果这是要输出的第一个元素count = 1;        //标记一下,以后的元素就不再是第一个元素了else                //如果在此之前已经有输出过元素了printf(" ");        //先输出一个空格作为分隔符printf("%d",b[i]);    //把这个不共组元素打印输出}}return 0;    //程序返回
}

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

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

相关文章

BIO、NIO

网络通信基本常识 什么是socket? socket 是应用层与 TCP/P 协议族通信的中间软件抽象层&#xff0c;它是一组接口&#xff0c;主机A 的应用程序要能和主机B 的应用程序通信&#xff0c;必须通过 Socket 建立连接。 短连接 SOCKET 连接发送完数据后马上断开连接 长连接 建…

RocketMQ单机部署完整学习笔记

文章目录 前言一、RocketMQ是什么&#xff1f;二、使用步骤1.安装MQ1.安装JDK2.安装mq3.MQ配置(核心) 2.搭建可视化dashboard1.下载源码2.修改配置3.启动 3.整合java1.生产者2.消费者3.启动生产者4.启动消费者5.dashboard添加消费组 三、总结全部的配置 前言 本文是基于4.X版本…

静态网页设计——电影角(HTML+CSS+JavaScript)

前言 声明&#xff1a;该文章只是做技术分享&#xff0c;若侵权请联系我删除。&#xff01;&#xff01; 使用技术&#xff1a;HTMLCSSJS 主要内容&#xff1a;本网页主要利用HTML语言编写&#xff0c;简要介绍世界上一些主要国家&#xff0c;例如&#xff0c;中&#xff0c;…

K8S三种发布方式和声明式资源管理

蓝绿发布 把应用服务集群标记位两个组&#xff0c;蓝组和绿组&#xff0c;先升级蓝组&#xff0c;先要把蓝组从负载均衡当中移除&#xff0c;绿组继续提供服务&#xff0c;蓝组升级完毕&#xff0c;再把绿组从负载均衡当中移除&#xff0c;绿组升级&#xff0c;然后都加入回负载…

【已解决】You have an error in your SQL syntax

报错讯息 java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘desc,target_url,sort,status,create_by,modify_by,created,last_update_time FROM…

跑通CLAM

项目场景&#xff1a; 从github上下载CLAM代码&#xff0c;上传Camelyon-16中的部分WSI图像&#xff0c;将代码跑通。 CLAM项目地址&#xff1a; GitHub - mahmoodlab/CLAM: Data-efficient and weakly supervised computational pathology on whole slide images - Nature …

Linux中经常使用的相关命令

查看硬盘存储容量使用情况&#xff1a; df -lh 列出 /bin 目录中的 5 个最大文件: ls -lSh /bin | head -5 删除文件和文件夹 在Linux中&#xff0c;要删除文件的命令是rm。你可以使用以下命令来删除一个文件&#xff1a; rm file_name如果要删除多个文件&#xff0c;可…

如何读取excel任意单元格内容的代码(vba,py)

如何读取excel任意单元格内容的代码 ━━━━━━━━━━━━━━━━━━━━━━ 你可以使用 VBScript&#xff08;VBS&#xff09;来读取 Excel 文件中的任意单元格内容。以下是一个简单的 VBScript 代码示例&#xff0c;使用 CreateObject 来操作 Excel 应用程序&#xff…

Tomcat系统架构与原理剖析及手写Tomcat及源码导入学习

文章目录 1 Tomcat官网2 Tomcat **系统架构与原理剖析**2.1 浏览器访问服务器的流程2.2 **Tomcat** **系统总体架构****2.2.1 Tomcat** **请求处理⼤致过程**2.2.2 **Tomcat Servlet**容器处理流程2.2.3 **Tomcat** 系统总体架构2.3 **Tomcat** **连接器组件** Coyote2.4 **Tom…

高级RAG(四):RAGAs评估

之前我完成了父文档检索器和llamaIndex从小到大的检索这两篇博客&#xff0c;我在这两篇博客中分别介绍了使用langchain和llamaIndex进行文档检索的方法和步骤&#xff0c;其中包含了不同的RAG的检索策略&#xff0c;通常来说一个典型的RAG系统一般包含两个主要的部件&#xff…

程序媛的mac修炼手册--MacOS系统更新升级史

啊&#xff0c;我这个口罩三年从未感染过新冠的天选免疫王&#xff0c;却被支原体击倒&#x1f637;大意了&#xff0c;前几天去医院体检&#xff0c;刚检查完出医院就摘口罩了&#x1f926;大伙儿还是要注意戴口罩&#xff0c;保重身体啊&#xff01;身体欠恙&#xff0c;就闲…

‘react-native‘ 不是内部或外部命令,也不是可运行的程序或批处理文件。

原因&#xff1a;没有下载react-native 解决下载react-native npm i -g react-native-cli

向日葵远程工具的使用Mysql5.7的安装与配置

目录 一、向日葵远程安装与使用 二、Mysql 5.7 安装与配置 2.1 安装 2.2 Navicat Premium 12 测试连接 本机测试连接 外部访问MySQL测试连接 三、思维导图 一、向日葵远程安装与使用 简介&#xff1a; 向日葵远程控制是一款用于对远程PC进行管理和服务的软件,拥有5秒快速…

uniapp从入门到精通(全网保姆式教程)~ 别再说你不会开发小程序了

目录 一、介绍 二、环境搭建&#xff08;hello world&#xff09; 2.1 下载HBuilderX 2.2 下载微信开发者工具 2.3 创建uniapp项目 2.4 在浏览器运行 2.5 在微信开发者工具运行 2.6 在手机上运行 三、项目基本目录结构 四、开发规范概述 五、全局配置文件&#xff0…

移动神器RAX3000M路由器变身家庭云之四:开放LuCI管理界面,网站服务

前面已经改造成了家庭云供外网访问了。由于这个路由本来就是openwrt&#xff0c;openwrt本身的管理界面LuCI-admin很好用&#xff0c;但被屏蔽了&#xff0c;需要打开。 打开界面 ssh登录路由器&#xff0c;修改 /etc/config/uhttpd配置文件如下&#xff1a; config uhttpd …

【JUC】Synchronized及JVM底层原理

Synchronized使用方式 Synchronized有三种应用方式 作用于实例方法&#xff0c;当前示实例加锁进入同步代码前要获得当前实例的锁&#xff0c;即synchronized普通同步方法&#xff0c;调用指令将会检查方法的ACC_SYNCHRONIZED访问标志是否被设置。 如果设置了&#xff0c;执行…

前端发布项目自动更新

思路&#xff1a;无论vue还是react打包都会有dist文件夹&#xff0c;内部有index.html。我是想根据index.html中的script src地址是否改变&#xff0c;判断项目是否有新内容。 具体代码如下 首先先拿到生产环境中index.html文本&#xff0c;由于是单页面应用使用fetch(/?_st…

JS字符串API: slice、split、JSON.stringify、trim、concat 、indexOf...

substring() 字符串的截取可以使用substring()方法和slice()方法。其中substring()方法接受两个参数&#xff0c;第一个参数是起始位置&#xff0c;第二个参数是结束位置&#xff0c;截取的字符串不包括结束位置的字符。 let str "Hello, World!"; let str2 &quo…

性能测试之(五):JMeter 入门1

一、性能测试工具&#xff08;JMeter、LoadRunner&#xff09; 1、LoadRunner是一种工业级的测试工具 &#xff0c;可以模拟上万用户实施测试&#xff0c; 优点&#xff1a;多用户&#xff08;支持数量单位万&#xff09;、详细分析报表、支持IP欺骗 缺点&#xff1a;收费、体…

金融中IC和IR的定义

当谈到金融领域时&#xff0c;IC&#xff08;Information Coefficient&#xff09;和IR&#xff08;Information Ratio&#xff09;通常是用来评估投资组合管理绩效的指标。它们都涉及到投资者对信息的利用和管理的效果。 信息系数&#xff08;IC - Information Coefficient&a…