自学1

Problem1 明明的随机数

## 题目描述

明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了 N 个 1 到 1000 之间的随机整数 (N <= 100),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。

## 输入格式

输入有两行,第 1 行为 1 个正整数,表示所生成的随机数的个数 N。

第 2 行有 N 个用空格隔开的正整数,为所产生的随机数。

## 输出格式

输出也是两行,第 1 行为 1 个正整数 M,表示不相同的随机数的个数。

第 2 行为 M 个用空格隔开的正整数,为从小到大排好序的不相同的随机数。

## 样例输入

10

20 40 32 67 40 20 89 300 400 15

## 样例输出

8
15 20 32 40 67 89 300 400

## 题解

由题目可知,这是一道关于“排序”和“去重”的问题,我们首先要进行排序,因为排序后的数列如果有相同的数字那一定是连续的,可以由它后面的一个数字代替(即当出现相同数字时,后面整体数字前移一位)。

## AC代码

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 
 4 int main() {
 5     int n, sum = 0;
 6     int a[110];
 7     cin >> n;
 8     for(int i = 1; i <= n; i ++)
 9         cin >> a[i];
10     sort(a + 1, a + 1 + n);
11     for(int i = 1; i <= n; i ++)
12         if(a[i] != a[i + 1])
13             sum ++;
14     cout << sum << endl;
15     for(int i = 1; i <= n; i ++)
16         if(a[i] != a[i + 1])
17             cout << a[i] << " ";
18     return 0;
19 }

## 拓展

这道题可以通过使用STL做,代码如下:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 
 4 set<int> s;
 5 
 6 int main() {
 7     int n, num;
 8     cin >> n;
 9     for(int i = 0; i < n; i ++) {
10         cin >> num;
11         s.insert(num);
12     }
13     cout << s.size() << endl;
14     while(s.empty() == 0) {
15         cout << *s.begin() << " ";
16         s.erase(s.begin());
17     }
18     return 0;
19 }

Problem2 村村通

## 题目描述

某市调查城镇交通状况,得到现有城镇道路统计表。表中列出了每条道路直接连通的城镇。市政府 "村村通工程" 的目标是使全市任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只要相互之间可达即可)。请你计算出最少还需要建设多少条道路?

## 输入格式

输入包含若干组测试数据,每组测试数据的第一行给出两个用空格隔开的正整数,分别是城镇数目 n 和道路数目 m ;随后的 m 行对应 m 条道路,每行给出一对用空格隔开的正整数,分别是该条道路直接相连的两个城镇的编号。简单起见,城镇从 1 到 n 编号。

注意:两个城市间可以有多条道路相通。

在输入数据的最后,为一行一个整数 00,代表测试数据的结尾。

## 输出格式

对于每组数据,对应一行一个整数。表示最少还需要建设的道路数目。

## 样例输入

4 2
1 3
4 3
3 3
1 2
1 3
2 3
5 2
1 2
3 5
999 0
0

## 样例输出

1
0
2
998

## 题解

这道题考察的是并查集。

我们首先要处理每一条存在的边,把所有存在的边所连接的两个结点用并查集合并。

然后记录不同的代表元素个数,即可得知连通块数量。

## AC代码

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 
 4 const int N = 1010;
 5 int f[N];
 6 int n, m;
 7 
 8 //初始化
 9 void init() {
10     for(int i = 1; i <= n; i ++)
11         f[i] = i;//自己的父亲就是自己
12 }
13 
14 //寻找祖先
15 int find(int x) {
16     if(f[x] == x)
17         return x;
18     return f[x] = find(f[x]);
19 }
20 
21 int main() {
22 
23     while(cin >> n >> m) {
24         init();
25         while(m --) {
26             int a, b;
27             cin >> a >> b;
28             int x = find(a), y = find(b);//压缩路径
29             f[x] = y;
30         }
31         int ans = 0;
32         for(int i = 1; i <= n; i ++)
33             if(f[i] == i)//合并集合后,自己的父亲就是自己的,视作生成树
34                 ans ++;
35         //ans个连通块可以看作ans个结点,那么ans个结点并入一个生成树需要ans-1条边
36         cout << ans - 1 << endl;
37     }
38     return 0;
39 }

 

原文链接:https://www.cnblogs.com/wanyy-home/p/17348181.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:自学1 - Python技术站

(0)
上一篇 2023年4月23日
下一篇 2023年4月25日

相关文章

  • 【华为OD机试 2023】专栏介绍 +华为OD机试介绍+ 真题目录【转载】

    华为题库说明 2022与2023题库的区别 华为OD机试的题库是季度更新的(Q1\Q2\Q3\Q4)。笔者专栏的题库分为2023和2022。 2023的题库是包括2022.11(Q4第四季度)之后以及2023年的题库。 2022的题库是包括2022.11(Q4第四季度)之前题库。 支持的语言 目前大部分题 使用C++ Java JavaScript 以及py…

    算法与数据结构 2023年4月17日
    00
  • 李航统计学习概述

    监督学习 感知机 概念: 感知机模型的基本形式是: \(f(x) = sign(w \cdot x + b)\) 其中,\(x\) 是输入样本的特征向量,\(w\) 是权值向量,\(b\) 是偏置量,\(w \cdot x\) 表示向量 \(w\) 和 \(x\) 的点积。\(sign\) 函数表示符号函数,当输入大于 0 时输出 1,否则输出 -1。 要求…

    算法与数据结构 2023年4月25日
    00
  • C++ 数据结构之kmp算法中的求Next()函数的算法

    C++ 数据结构之kmp算法中的求Next()函数的算法 什么是KMP算法和Next()函数 KMP算法(Knuth-Morris-Pratt算法)是一种字符串匹配算法,能够解决的问题是,在一个文本串S中查找一个模式串P是否出现并且返回第一次出现的位置。而Next()函数则是在KMP算法中使用的一个关键的子函数,用于计算模式串P中每个前缀的最长相同真前缀和后…

    数据结构 2023年5月17日
    00
  • Python实现的数据结构与算法之队列详解

    下面是详细讲解“Python实现的数据结构与算法之队列详解”的完整攻略。 队列的定义 队列(Queue)是一种先进出(FIFO)的数据构,类似于现实生活中的排队。队列有两个基本操作:入队(enqueue)和出队(dequeue)。入队操作将元素添加到队列的末尾,出队操作将队列的第一个元移除返回。 队列实现 队列可以使用Python中的列表(list)来实现。…

    python 2023年5月14日
    00
  • React前端解链表数据结构示例详解

    我将为您详细讲解“React前端解链表数据结构示例详解”的完整攻略。 React前端解链表数据结构示例详解 一、前置知识 在学习本篇文章之前,您需要掌握以下前置知识: 基本的 JavaScript 语法 React 中的组件概念和生命周期 链表数据结构的基本概念和操作方法 如果您对以上知识点还不是很熟悉,可以先自学相关知识再来阅读本文。 二、链表数据结构简介…

    数据结构 2023年5月17日
    00
  • Python中数字以及算数运算符的相关使用

    下面是详细讲解“Python中数字以及算数运算符的相关使用”的完整攻略。 1. 数字类型 在Python中,数字类型包括整数、浮点数和复数。其中,整数是没有小数部的数字浮点数是带有小数部分的数字,而复数是由实数和数部分组成的数字。 1.1 整数 在Python中,整数类型用int表示,可以进行加、减、乘、除、模、幂等运算。 a = 10 b = 3 prin…

    python 2023年5月14日
    00
  • Python编程之基于概率论的分类方法:朴素贝叶斯

    下面是详细讲解“Python编程之基于概率论的分类方法:朴素贝叶斯”的完整攻略。 1. 什么是朴素贝叶斯? 朴素贝叶斯是一种基于概率论的分类方法,它假设特征之间相互独立,从而简化了计算。朴素贝叶斯分类器通常用于文本分类、垃圾邮件过滤、情感分析等领域。 2. Python实现朴素贝叶斯的方法 2.1 朴素叶斯分类器 下面是Python使用朴素贝叶斯分类器实现文…

    python 2023年5月14日
    00
  • python编程实现希尔排序

    下面是关于“Python编程实现希尔排序”的完整攻略。 1. 希尔排序简介 希尔排序是一种高效的排序算法,它是插入排序的一种改进。希尔排序通过将待排序的数组分成若干个子序列,对每个子序列进行插入排序,最后再对整个数组进行一次插入排序。希尔排序的时间复杂度为$O(nlogn)$,是一种比较快速的排序算法。 2. Python实现希尔排序 下面是Python实现…

    python 2023年5月13日
    00
合作推广
合作推广
分享本页
返回顶部