和为0的四元组-蛮力枚举(C语言实现)

news2025/1/7 18:41:11

目录

一、问题描述

二、蛮力枚举思路

1.初始化:

2.遍历所有可能的四元组:

3.检查和:

4.避免重复:

5.更新计数器:

三、代码实现

四、运行结果

五、 算法复杂度分析


一、问题描述

给定一个整数数组 nums,编写一个函数,找出所有和为0的四元组。你可以不考虑答案的顺序。如:nums = [-1, 0, 1, 2, -1, -4],输出:[-1,-1,0,2]等。

二、蛮力枚举思路

1.初始化:

        创建一个二维数组rec来存储已经找到的和为0的四元组,以避免重复打印。同时,使用一个计数器count来记录已经找到的四元组的数量。

2.遍历所有可能的四元组:

        使用四层嵌套循环来遍历数组中的所有可能的四个元素的组合。每一层循环分别选择一个元素,确保选择的元素是唯一的(即不重复选择同一个元素,也不选择之前已经选择过的元素位置之后的元素)。

3.检查和:

        对于每一组通过四层循环选出的四个元素,计算它们的和。如果和等于0,则进一步检查这组元素是否已经记录在rec数组中。

4.避免重复:

        通过遍历rec数组,检查当前找到的四元组是否已经存在。如果存在,则跳过这组元素;如果不存在,则将其添加到rec数组中,并打印出来。

5.更新计数器:

        每当找到一个新的和为0的四元组时,更新count计数器的值。

三、代码实现

#include <stdio.h>
#include <stdlib.h> 

// 假设MAX是一个足够大的宏定义,用于指定rec数组的大小
#define MAX 1000 // 根据实际情况调整这个值

// 定义一个比较函数,用于qsort排序(此函数应在代码中定义,但在此省略)
int compare(const void* a, const void* b) {
	return (*(int*)a - *(int*)b);
}

// 找出所有和为0的四元组并打印
void num4sum0(int arr[], int N) {
	int rec[MAX][4] = { 0 }; // 用于存储已找到的四元组,避免重复打印
	int count = 0; // 记录已找到的四元组数量

	// 使用四层嵌套循环遍历所有可能的四元组
	for (int i = 0; i < N - 3; i++) {
		for (int j = i + 1; j < N - 2; j++) {
			for (int k = j + 1; k < N - 1; k++) {
				for (int l = k + 1; l < N; l++) {
					// 检查当前四元组的和是否为0
					if (arr[i] + arr[j] + arr[k] + arr[l] == 0) {
						int flag = 0; // 标记当前四元组是否已记录
						// 检查当前四元组是否已存在于rec数组中
						for (int a = 0; a < count; a++) { // 注意:应使用< count而非<= count
							if (rec[a][0] == arr[i] && rec[a][1] == arr[j] && rec[a][2] == arr[k] && rec[a][3] == arr[l]) {
								flag = 1;
								break;
							}
						}
						// 如果当前四元组未记录,则添加到rec数组并打印
						if (flag == 0) {
							rec[count][0] = arr[i];
							rec[count][1] = arr[j];
							rec[count][2] = arr[k];
							rec[count][3] = arr[l];
							printf("%d: %d %d %d %d\n", count, arr[i], arr[j], arr[k], arr[l]);
							count++; // 更新已找到的四元组数量
						}
					}
				}
			}
		}
	}
}

int main() {
	//int arr[] = { -1, 0, 1, 2, -1, -4 };
	int arr[] = { -23, 45, -12, 7, 38, -41, 19, -6, 22, -34, 49, -7, 27, -29, 11, 3, -7, 28, 14, -9 };
	int N = sizeof(arr) / sizeof(int); // 计算数组长度
	// 使用qsort对数组进行排序
	qsort(arr, N, sizeof(int), compare);
	// 查找并打印所有和为0的四元组
	num4sum0(arr, N);
	return 0;
}

四、运行结果

五、 算法复杂度分析

        算法的时间复杂度为O(N^4),蛮力枚举的方法虽然简单直观,但它的时间复杂度非常高,为O(N^4),其中N是数组的长度。这意味着当数组很大时,算法的执行时间将非常长,可能变得不可接受。可以先对数组进行排序,然后使用双指针法来减少时间复杂度-下次更新。

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

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

相关文章

某xx到家app逆向

去官网下载app即可 https://www.dongjiaotn.com/#/home查壳 360的壳子 直接脱壳即可 抓包 请求地址 https://api.gateway.znjztfn.cn/server/user/index 请求参数 {"lng": "xxxx","lat": "xxxx","city_id": "1376&…

docker搭建gitlab和jenkins

搭建gitlab 搭建gitlab首先需要一个gitlab的镜像 其次最好为他设置一个单独的目录 然后编写一个docker-compose文件 version: 3.1 services:gitlab:image: gitlab_zh:latest //此处为你的镜像名称container_name: gitlab //容器名称restart: always …

嵌入式linux中socket控制与实现

一、概述 1、首先网络,一看到这个词,我们就会想到IP地址和端口号,那IP地址和端口各有什么作用呢? (1)IP地址如身份证一样,是标识的电脑的,一台电脑只有一个IP地址。 (2)端口提供了一种访问通道,服务器一般都是通过知名端口号来识别某个服务。例如,对于每个TCP/IP实…

推荐系统重排:MMR 多样性算法

和谐共存&#xff1a;相关性与多样性在MMR中共舞 推荐系统【多样性算法】系列文章&#xff08;置顶&#xff09; 1.推荐系统重排&#xff1a;MMR 多样性算法 2.推荐系统重排&#xff1a;DPP 多样性算法 引言 在信息检索和推荐系统中&#xff0c;提供既与用户查询高度相关的文…

概述(讲讲python基本语法和第三方库)

我是北子&#xff0c;这是我自己写的python教程&#xff0c;主要是记录自己的学习成果方便自己日后复习&#xff0c; 我先学了C/C&#xff0c;所以这套教程中可能会将很多概念和C/C去对比&#xff0c;所以该教程大概不适合零基础的人。 it seems that python nowadays 只在人工…

【python因果库实战16】双重稳健模型1

这里写目录标题 双重稳健模型数据简单双重稳健模型双重稳健 IP 特征模型 双重稳健模型 基本上&#xff0c;这些是利用加权模型增强结果模型的不同集合模型。 本笔记展示了不同的结果模型和倾向性模型组合方式&#xff0c; 但由于可能的组合非常多&#xff0c;本笔记并不打算展…

如何恢复已删除的 Telegram 消息 [iOSamp;Android]

Telegram 是一款功能强大的消息应用程序&#xff0c;因其易用性、隐私保护和众多炫酷功能而深受用户喜爱。然而&#xff0c;有时我们会不小心删除重要的消息。在这种情况下你应该做什么&#xff1f; 本文将为您提供简单有效的解决方案来恢复 Telegram 上已删除的消息&#xff…

第431场周赛:最长乘积等价子数组、计算字符串的镜像分数、收集连续 K 个袋子可以获得的最多硬币数量、不重叠区间的最大得分

Q1、最长乘积等价子数组 1、题目描述 给你一个由 正整数 组成的数组 nums。 如果一个数组 arr 满足 prod(arr) lcm(arr) * gcd(arr)&#xff0c;则称其为 乘积等价数组 &#xff0c;其中&#xff1a; prod(arr) 表示 arr 中所有元素的乘积。gcd(arr) 表示 arr 中所有元素的…

【微服务】2、网关

Spring Cloud微服务网关技术介绍 单体项目拆分微服务后的问题 服务地址问题&#xff1a;单体项目端口固定&#xff08;如黑马商城为8080&#xff09;&#xff0c;拆分微服务后端口各异&#xff08;如购物车808、商品8081、支付8086等&#xff09;且可能变化&#xff0c;前端难…

使用JMeter玩转tidb压测

作者&#xff1a; du拉松 原文来源&#xff1a; https://tidb.net/blog/3f1ada39 一、前言 tidb是mysql协议的&#xff0c;所以在使用过程中使用tidb的相关工具连接即可。因为jmeter是java开发的相关工具&#xff0c;直接使用mysql的jdbc驱动包即可。 二、linux下安装jmet…

2024网络安全运营方案概述(附实践资料合集)

以下是网络安全运营方案的详细内容&#xff1a; 一、目标与原则 目标&#xff1a;建立一套安全高效、灵活性强的网络安全运营体系&#xff0c;实现对网络安全的全面监控、防护和应急响应。原则&#xff1a; 全员参与&#xff1a;网络安全是全员共同的责任&#xff0c;所有员工…

使用Python进行图像裁剪和直方图分析

一、简介 在数字图像处理领域&#xff0c;裁剪和分析图像的直方图是两个非常基本且重要的操作。本文将通过一个简单的Python项目&#xff0c;展示如何使用skimage和matplotlib库来裁剪图像并分析其RGB通道的直方图。 二、环境准备 在开始之前&#xff0c;请确保你已经安装了以…

vue3-dom-diff算法

vue3diff算法 什么是vue3diff算法 Vue3中的diff算法是一种用于比较虚拟DOM树之间差异的算法&#xff0c;其目的是为了高效地更新真实DOM&#xff0c;减少不必要的重渲染 主要过程 整个过程主要分为以下五步 前置预处理后置预处理仅处理新增仅处理后置处理包含新增、卸载、…

【U8+】用友U8软件中,出入库流水输出excel的时候提示报表输出引擎错误。

【问题现象】 通过天联高级版客户端登录拥有U8后&#xff0c; 将出入库流水输出excel的时候&#xff0c;提示报表输出引擎错误。 进行报表输出时出现错误&#xff0c;错误信息&#xff1a;找不到“fd6eea8b-fb40-4ce4-8ab4-cddbd9462981.htm”。 如果您正试图从最近使用的文件列…

[SMARTFORMS] 创建样式模板

通过事务码SMARTFORMS创建样式模板 选择样式&#xff0c;自定义样式模板名称ZST_DEMO_2025 点击"创建"按钮&#xff0c;跳转至样式模板详情页面&#xff0c;我们可以在该页面上设置SMARTFORMS表单相关的样式 在段落样式处&#xff0c;右键选择创建节点&#xff0c;输…

基于51单片机和DS3231时钟模块、LCD1602(I2C通信)模块的可调时钟+温度测量+计时+闹钟

目录 系列文章目录前言一、效果展示二、原理分析三、各模块代码1、延时函数2、定时器03、定时器14、独立按键5、DS3231时钟模块6、LCD1602模块&#xff08;PCF8574T驱动&#xff09; 四、主函数总结 系列文章目录 前言 之前做过一个类似的&#xff0c;用到了很多外设&#xff…

通义视觉推理大模型QVQ-72B-preview重磅上线

Qwen团队推出了新成员QVQ-72B-preview&#xff0c;这是一个专注于提升视觉推理能力的实验性研究模型。提升了视觉表示的效率和准确性。它在多模态评测集如MMMU、MathVista和MathVision上表现出色&#xff0c;尤其在数学推理任务中取得了显著进步。尽管如此&#xff0c;该模型仍…

企业级Nosql数据库和Redis集群

一、关系数据库和Nosql数据库 关系数据库 定义&#xff1a;关系数据库是建立在关系模型基础上的数据库。它使用表格&#xff08;关系&#xff09;来存储数据&#xff0c;通过行和列的形式组织信息。例如&#xff0c;一个简单的学生信息表可能有 “学号”“姓名”“年龄”“班级…

Ant Design中Flex布局、Grid布局和Layout布局详解

好的&#xff0c;我们来更详细地探讨 Ant Design 中的 Flex布局、Grid布局 和 Layout布局 的特点、用法、适用场景&#xff0c;以及如何灵活运用它们来构建页面。下面将从各个方面进行更深入的分析&#xff0c;并提供具体的实例。 VueFlex布局实现响应式布局 1. Flex布局 概念…

基于FPGA的SNN脉冲神经网络之IM神经元verilog实现,包含testbench

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 2.算法运行软件版本 vivado2019.2 3.部分核心程序 &#xff08;完整版代码包含详细中文注释和操作步骤视频&#xff0…