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

蓝桥杯比赛python程序设计——班级活动

问题描述

小明的老师准备组织一次班级活动。班上一共有 nn 名 (nn 为偶数) 同学,老师想把所有的同学进行分组,每两名同学一组。为了公平,老师给每名同学随机分配了一个 nn 以内的正整数作为 idid,第 ii 名同学的 idid 为 aiai​。

老师希望通过更改若干名同学的 idid 使得对于任意一名同学 ii,有且仅有另一名同学 jj 的 idid 与其相同 (ai=ajai​=aj​)。请问老师最少需要更改多少名同学的 idid?

输入格式

输入共 22 行。

第一行为一个正整数 nn。

第二行为 nn 个由空格隔开的整数 a1,a2,...,ana1​,a2​,...,an​。

输出格式

输出共 11 行,一个整数。

样例输入

4
1 2 2 3

样例输出

1

样例说明

仅需要把 a1a1​ 改为 33 或者把 a3a3​ 改为 11 即可。

评测用例规模与约定

对于 20%20% 的数据,保证 n≤103n≤103。

对于 100%100% 的数据,保证 n≤105n≤105。

运行限制

语言最大运行时间最大运行内存
C++1s256M
C1s256M
Java2s256M
Python33s256M
PyPy33s256M
Go3s256M
JavaScript3s256M

完整代码:

import os
import sys
# 请在此输入您的代码
n = int(input())
data = list(map(int,input().split()))
data1={}
sum1=0
sum2=0
for i in data:
  data1[i]=data1.get(i,0)+1
for i,j in data1.items():
  if j<2:
    sum1=sum1+1
  if j>2:
    sum2=sum2+j-2
if sum1>=sum2:
  print(sum2+(sum1-sum2)//2)
else: 
  print(sum2)

 

 

代码功能概述

这段 Python 代码的主要功能是对输入的数据进行处理,统计其中出现次数少于 2 次和多于 2 次的元素相关情况,然后根据统计结果计算并输出一个数值。具体来说,程序首先读取一个整数 n 表示数据的数量,接着读取 n 个整数并存储在列表 data 中,之后对列表中的元素进行计数统计,最后根据统计结果计算并输出结果。

代码详细分析

1. 导入模块

python

import os
import sys

导入了 os 和 sys 模块,但在后续代码中并未使用这两个模块,可将其移除。

2. 读取输入数据

python

n = int(input())
data = list(map(int, input().split()))

  • 从标准输入读取一个整数 n,表示接下来要输入的数据个数。
  • 读取一行输入,将其按空格分割成多个字符串,再将每个字符串转换为整数,最后将这些整数存储在列表 data 中。
3. 统计元素出现次数

python

data1 = {}
for i in data:
    data1[i] = data1.get(i, 0) + 1

  • 初始化一个空字典 data1,用于统计列表 data 中每个元素的出现次数。
  • 遍历列表 data,对于每个元素 i,使用 get 方法获取其在字典中的当前计数,如果元素不存在则默认为 0,然后将计数加 1。
4. 统计出现次数少于 2 次和多于 2 次的元素情况

python

sum1 = 0
sum2 = 0
for i, j in data1.items():
    if j < 2:
        sum1 = sum1 + 1
    if j > 2:
        sum2 = sum2 + j - 2

  • 初始化两个变量 sum1 和 sum2,分别用于记录出现次数少于 2 次和多于 2 次的元素相关统计值。
  • 遍历字典 data1 的键值对,对于出现次数 j 少于 2 次的元素,将 sum1 加 1;对于出现次数 j 多于 2 次的元素,将 j - 2 累加到 sum2 中。
5. 根据统计结果计算并输出结果

python

if sum1 >= sum2:
    print(sum2 + (sum1 - sum2) // 2)
else:
    print(sum2)

3. 统计元素出现次数

python

data1 = {}
for i in data:
    data1[i] = data1.get(i, 0) + 1

4. 统计出现次数少于 2 次和多于 2 次的元素情况

python

sum1 = 0
sum2 = 0
for i, j in data1.items():
    if j < 2:
        sum1 = sum1 + 1
    if j > 2:
        sum2 = sum2 + j - 2

5. 根据统计结果计算并输出结果

python

if sum1 >= sum2:
    print(sum2 + (sum1 - sum2) // 2)
else:
    print(sum2)
  • 如果 sum1 大于等于 sum2,则计算 sum2 + (sum1 - sum2) // 2 并输出。
  • 否则,直接输出 sum2

    代码功能概述

    这段 Python 代码的主要功能是对输入的数据进行处理,统计其中出现次数少于 2 次和多于 2 次的元素相关情况,然后根据统计结果计算并输出一个数值。具体来说,程序首先读取一个整数 n 表示数据的数量,接着读取 n 个整数并存储在列表 data 中,之后对列表中的元素进行计数统计,最后根据统计结果计算并输出结果。

    代码详细分析

    1. 导入模块

    python

    import os
    import sys
    
     

    导入了 os 和 sys 模块,但在后续代码中并未使用这两个模块,可将其移除。

    2. 读取输入数据

    python

    n = int(input())
    data = list(map(int, input().split()))
    
  • 从标准输入读取一个整数 n,表示接下来要输入的数据个数。
  • 读取一行输入,将其按空格分割成多个字符串,再将每个字符串转换为整数,最后将这些整数存储在列表 data 中。

  • 初始化一个空字典 data1,用于统计列表 data 中每个元素的出现次数。
  • 遍历列表 data,对于每个元素 i,使用 get 方法获取其在字典中的当前计数,如果元素不存在则默认为 0,然后将计数加 1。

  • 初始化两个变量 sum1 和 sum2,分别用于记录出现次数少于 2 次和多于 2 次的元素相关统计值。
  • 遍历字典 data1 的键值对,对于出现次数 j 少于 2 次的元素,将 sum1 加 1;对于出现次数 j 多于 2 次的元素,将 j - 2 累加到 sum2 中。
  • 如果 sum1 大于等于 sum2,则计算 sum2 + (sum1 - sum2) // 2 并输出。
  • 否则,直接输出 sum2

相关文章:

  • 【前端】一文掌握 Vue 3 指令用法(vue3 备忘清单)
  • 字符串复习
  • scss报错Sass @import rules are deprecated and will be removed in Dart Sass 3.0.0
  • 如何加强 SSH 安全:内网和专用网络环境下的防护策略
  • Linux中的文件寻址
  • 脚手架 + 指令
  • 山东大学软件学院项目创新实训开发日志(4)之中医知识问答数据存储、功能结构、用户界面初步设计
  • 语义分析(编译原理)
  • Springcache+xxljob实现定时刷新缓存
  • Linux文件描述符的分配机制与重定向实现:揭开“一切皆文件”的面纱
  • 使用卷积神经网络识别MNIST数据集
  • AI与.NET技术实操系列(三):在 .NET 中使用大语言模型(LLMs)
  • YOLOSCM: 基于改进YOLO算法的车辆检测模型详解
  • [动规21] 乘积最大子数组 #medium
  • Qt使用QGraphicsView绘制线路图————附带详细实现代码
  • rk3586开发版新增系统调用(Android13)
  • Altium Designer 24 PCB 走线倒圆弧方法
  • 23 推导式
  • 计算机网络 OSI参考模型
  • 每日总结3.31
  • 广告设计与制作实训总结2000字/做博客的seo技巧
  • 网站建商城/广州网站开发多少钱
  • wordpress 媒体库地址/sem 优化软件
  • 公司做社交网站诈骗/2022年搜索引擎优化指南
  • 软膜做网站有用吗/电商培训机构有哪些哪家比较好
  • 网站建设意向表/百度下载并安装到桌面