L2-017 人以群分 (25 分)(c语言实现)

2023-11-11

该题目如下

如题所示,其中会先给数据的个数,所以先进行数据的录入,利用数组来存储数据中的活跃度,同时利用一个n来记录数组中元素的个数。

数据录入过程:

int n1, n2, n3;
int n = 0;
scanf("%d", &n);
int arr[100000];
for (int i = 0; i < n; i++)
{
	scanf("%d", &arr[i]);
}

排序在这里选用库函数自带的qsort,否则不能达到该题所要求的时间要求(测试点四),手打快排无法满足该题时间要求

qsort(数组名,数组中元素的个数,数组每个元素所占的字节数量,自定义的inc函数)

代码实现如下

#include <stdio.h>
#include <stdlib.h>
int inc(const void* a, const void* b)
{
	return *(int*)a - *(int*)b;
}
//此为自定义的inc函数,qsort在比较不同类型的数据的时候需要不同类型的自定义inc函数
int main()
{
	int n1, n2, n3;
	int n = 0;
	scanf("%d", &n);
	int arr[100000];
	for (int i = 0; i < n; i++)
	{
		scanf("%d", &arr[i]);
	}
	qsort(arr, n - 1, sizeof(arr[0]), inc);
}

到这一步完成对数组的排序

根据题目要求,理解如下

奇数 偶数
外向 (n/2)+1 (n/2)

内向

(n/2) (n/2)

n1代表外向人数,n2代表内向人数

而数组已经被我们排序,所以只需要从数组中提取需要的数据并相加即可

意为先从数组的前端提取n2个数字,记为sum1,然后剩余的数字为另一组记为sum2

由于数组已经被排序,所以我们清楚地知道sum2与sum1的大小必然是sum2>sum1,所以在这里不需要利用绝对值函数,直接进行sum2-sum1即可

代码的实现如下

#include <stdio.h>
#include <stdlib.h>
int inc(const void* a, const void* b)
{
	return *(int*)a - *(int*)b;
}
int main()
{
	int n1, n2, n3;
	int n = 0;
	scanf("%d", &n);
	int arr[100000];
	for (int i = 0; i < n; i++)
	{
		scanf("%d", &arr[i]);
	}
	qsort(arr, n-1,sizeof(arr[0]),inc);
	int sum1 = 0, sum2 = 0;
	if (n % 2 == 0)
	{
		n1 = n2 = n / 2;
		for (int i = 0; i < n1; i++)
		{
			sum1 += arr[i];
		}
		for (int m = n1; m < n; m++)
		{
			sum2 += arr[m];
		}
	}
	else
	{
		n1 = (n / 2) + 1;
		n2 = n / 2;
		for (int i = 0; i < n1-1; i++)
		{
			sum1 += arr[i];
		}
		for (int m = n1-1; m < n; m++)
		{
			sum2 += arr[m];
		}
	}
    n3 = sum2 - sum1;
	printf("Outgoing #: %d\nIntroverted #: %d\nDiff = %d",n1,n2,n3);
}

利用手打快排能保证最终结果正确,但是无法通过测试点4

手打快排实现如下

#include <stdio.h>
#include <math.h>
void quickSort(int* array, int left, int right)
{
	if (NULL == array)
	{
		return;
	}

	if (left < right)
	{
		int pivot = array[left];
		int low = left, high = right;
		while (low < high)
		{
			while (array[high] >= pivot && low < high)
				high--;
			array[low] = array[high];

			while (array[low] <= pivot && low < high)
				low++;
			array[high] = array[low];
		}
		array[low] = pivot;

		quickSort(array, left, low - 1);
		quickSort(array, low + 1, right);
	}
}
int main()
{
	int n1, n2, n3;
	int n = 0;
	scanf("%d", &n);
	int arr[100000];
	for (int i = 0; i < n; i++)
	{
		scanf("%d", &arr[i]);
	}
	quickSort(arr, 0, n - 1);
	int sum1 = 0, sum2 = 0;
	if (n % 2 == 0)
	{
		n1 = n2 = n / 2;
		for (int i = 0; i < n1; i++)
		{
			sum1 += arr[i];
		}
		for (int m = n1; m < n; m++)
		{
			sum2 += arr[m];
		}
		n3 = sum2 - sum1;
	}
	else
	{
		n1 = (n / 2) + 1;
		n2 = n / 2;
		for (int i = 0; i < n1-1; i++)
		{
			sum1 += arr[i];
		}
		for (int m = n1-1; m < n; m++)
		{
			sum2 += arr[m];
		}
		n3 = sum2 - sum1;
	}
	printf("Outgoing #: %d\nIntroverted #: %d\nDiff = %d",n1,n2,n3);
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

L2-017 人以群分 (25 分)(c语言实现) 的相关文章

随机推荐

  • chroot命令

    转载 理解 chroot 什么是 chroot chroot 即 change root directory 更改 root 目录 在 linux 系统中 系统默认的目录结构都是以 即是以根 root 开始的 而在使用 chroot 之后
  • 感知机对偶算法

    知识源于 统计学习方法 第二版 李航 感知机 perception 一种二分类的线性分类模型 输入为实例的特征向量 输出为实例的类别 二分类类别为 1 1二值 用算法2 2 感知机学习算法的对偶形式 代码实现例2 2 一 实验目的 用算法2
  • 1061 判断题

    判断题的评判很简单 本题就要求你写个简单的程序帮助老师判题并统计学生们判断题的得分 输入格式 输入在第一行给出两个不超过 100 的正整数 N 和 M 分别是学生人数和判断题数量 第二行给出 M 个不超过 5 的正整数 是每道题的满分值 第
  • POJ-3253 Fence Repair

    农夫约翰想修理牧场周围的一小段围栏 他测量围栏并认定他需要 1 20000 厚木板 每一个都具有一些整数长度大号我 1 大号我 50000 单元 然后 他购买一块长板足够长 以便看到N块板 即 其长度是长度L i的总和 FJ忽略了 切口 锯
  • VPP代码阅读中文注解--dlist.h

    双向链表算法 本双向链表的所有元素存储在一个pool中 根据pool中内存块的序号进行索引 typedef struct u32 next u32 prev u32 value dlist elt t 本双向链表中每一个元素的结构 valu
  • Linux基础命令使用(4)

    which命令 which 命令的作用是 在 PATH 变量指定的路径中搜索可执行文件的所在位置 它一般用来确认系统中是否安装了指定的软件 which 可执行文件名称 确认是否安装了 gcc which gcc whereis命令 wher
  • 移动基站

    中国移动的基站采用小区制 覆盖范围几KM 而联通采用大区制 可以覆盖几十KM 辐射的频率大小和能量决定覆盖范围 也从另一角度来看 由能量守恒的角度来分析 手机辐射大的其基站辐射小 GSM 反之手机辐射小的其基站辐射大 CDMA 一般分为以下
  • Liferay中的Portlet事件通信

    Liferay中的Portlet事件通信在有的项目开发中是需要实现的一种机制 下面转自http liferaycms blogspot com 2011 07 inter portlet communication html Inter p
  • Java 5-2、用户模块-7个接口实现

    5 2 用户模块 7个接口实现 web端注册 app端注册 所需参数更少 登录 用户详情 修改密码 用户开关 修改用户信息 一 新增类 AppUserService java 此类需定义和mapper层接口大致相同的方法 仅做返回值取舍 因
  • 编译报错:Module parse failed: Unexpected token (18:41)

    error in node modules yargs lib platform shims esm mjs Module parse failed Unexpected token 18 41 You may need an approp
  • 科研笔记(九)重构智能手机CSI指纹用于室内定位(上)

    重构智能手机CSI指纹用于室内定位 题目 CRISLoc Reconstructable CSI Fingerprinting for Indoor Smartphone Localization 论文作者 Zhihui Gao Yunfa
  • Google Chrome访问出现 NET::ERR_CERT_INVALID

    前言 搭建一个nginx网站后 访问出现 您的连接不是私密连接 解决Google Chrome浏览器访问一个网页出现 NET ERR CERT INVALID 这是因为访问没有使用信任的CA证书的网站 chrome提示NET ERR CER
  • 电脑开机就重启循环_如何远程重启服务器???

    重启远程服务器重启的方法如下 方法一 使用windows自带的shutdown命令 远程重启服务器 当远程桌面连接服务无法顺利使用后 首先要确定的是服务器是否真的死机 通过ping目标服务器IP看是否畅通或者访问该服务器上的相关网络服务看是
  • 基于zlib实现的zip文件解压缩,支持目录解压缩,使用c语言实现

    目前用到了解压缩目录的功能 使用zlib来实现 但是找遍了网上的例子很少涉及到使用c语言编写并且完成多目录解压缩的例子 于是自己查看源码的minizip例子 修改了一下供大家参考 zlib官网下载 https www zlib net 当前
  • 掌优电子提供了私有化的刷脸支付部署

    现在刷脸支付是比较受热宠的一个加盟招商项目 不仅仅是刷脸支付带给商家便利 带给消费者不一样的智慧体验 这更是科技进步 互联网发展的一项实力证明 刷脸支付是继移动支付后推出的一种基于人脸AI识别技术 不仅仅让消费者在付款买单的时候摆脱了对手机
  • Spring Cloud中,Eureka常见问题总结

    Spring Cloud中 Eureka常见问题总结 指定Eureka的Environment 1 eureka environment 指定环境 参考文档 https github com Netflix eureka wiki Conf
  • 寻找数组的中心索引

    给你一个整数数组 nums 请计算数组的 中心下标 数组 中心下标 是数组的一个下标 其左侧所有元素相加的和等于右侧所有元素相加的和 如果中心下标位于数组最左端 那么左侧数之和视为 0 因为在下标的左侧不存在元素 这一点对于中心下标位于数组
  • mmdetection W&B 用wandb权重和偏差以进行记录

    如题 共需要修改四个文件 1 mmcv runner hooks logger init py from pavi import PaviLoggerHook from tensorboard import TensorboardLogge
  • 【Kubernetes运维篇】RBAC之准入控制器详解

    文章目录 一 ResourceQuota准入控制器 1 ResourceQuota是什么 2 限制CPU 内存 Pod数量 Deployment数量 3 限制存储空间大小 二 LimitRanger准入控制器 1 LimitRanger是什
  • L2-017 人以群分 (25 分)(c语言实现)

    该题目如下 如题所示 其中会先给数据的个数 所以先进行数据的录入 利用数组来存储数据中的活跃度 同时利用一个n来记录数组中元素的个数 数据录入过程 int n1 n2 n3 int n 0 scanf d n int arr 100000