ACM程序设计课内实验(2) 排序问题

基础知识‘

sort函数

C++中的sort函数是库中的一个函数,用于对容器中的元素进行排序。它的原型如下:

template <class RandomAccessIterator, class Compare>
void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp);
参数说明:
  • first:指向要排序序列的第一个元素的迭代器。
  • last:指向要排序序列的最后一个元素的下一个位置的迭代器。
  • comp:一个比较函数,用于指定排序的顺序。默认情况下,它使用operator<进行升序排序。如果需要降序排序,可以提供一个自定义的比较函数。

qsort函数

C++中的qsort函数是一个通用的排序函数,它位于头文件中。qsort函数接受一个数组、数组的大小以及一个比较函数作为参数。比较函数用于确定数组中元素的顺序。

#include <cstdlib>
#include <iostream>
#include <algorithm>using namespace std;//定义比较函数,用于排序
int cmp(const void *a, const void *b)
{int *pa=(int *)a;int *pb=(int *)b;return *pa-*pb;
}int main()
{int arr[]={10, 8, 2, 6, 7, 3};int len=sizeof(arr)/sizeof(arr[0]);qsort(arr, len, sizeof(int), cmp);for(int i=0;i<len;i++){cout<<arr[i]<<" ";}return 0;
}

 1.排序

Description

给你很多行数,将每行数排序(从小到大)!

Input

输入数据有很多行,每行10个正整数。

Output

将每行数从小到大输出。

Sample Input

10 9 8 7 6 5 4 3 2 1

Sample Output

1 2 3 4 5 6 7 8 9 10
#include <iostream>
#include <sstream>
#include <algorithm>using namespace std;// 快速排序函数,arr为待排序数组,left为左边界,right为右边界
void quickSort(int arr[], int left, int right) {if (left < right) {int pivot = arr[left]; // 选择基准值int i = left; // 左指针int j = right; // 右指针while (i < j) {// 从右向左找到第一个小于基准值的元素while (i < j && arr[j] >= pivot) {j--;}// 如果找到了,将其与左指针指向的元素交换,并将左指针向右移动一位if (i < j) {arr[i++] = arr[j];}// 从左向右找到第一个大于基准值的元素while (i < j && arr[i] < pivot) {i++;}// 如果找到了,将其与右指针指向的元素交换,并将右指针向左移动一位if (i < j) {arr[j--] = arr[i];}}// 将基准值放到正确的位置上arr[i] = pivot;// 递归地对左右两部分进行快速排序quickSort(arr, left, i - 1);quickSort(arr, i + 1, right);}
}int main() {int arr[100];while(scanf("%d",&arr[0])!=EOF){ for(int i=1; i<10; i++) scanf("%d",&arr[i]);quickSort(arr, 0, 9);for (int i = 0; i < 10; i++) { cout << arr[i] << " ";}cout << endl; }return 0;
}

 2.枫之舞------排序

Description

你会排序吗?请将给出的数据按(升序)排序~~ 

Input

输入数据有多组,首先输入一个T,代表有T组数,然后是T行,每行开头是N,代表有N个数需要排序,然后就是这N个要排序的数了!N大于1且小于1000. 

Output

把数据从小到大排序。

Sample Input

2
3 2 1 3
9 1 4 7 2 5 8 3 6 9

Sample Output

1 2 3
1 2 3 4 5 6 7 8 9
#include <bits/stdc++.h>
using namespace std;
int x[1005];
int main()
{int t;cin>>t;while(t--){int n;cin>>n;for(int i=0;i<n;i++)scanf("%d",&x[i]);sort(x,x+n,less<int>());for(int i=0;i<n-1;i++)printf("%d ",x[i]);printf("%d",x[n-1]);printf("\n");}return 0;
}

 3.让气球飞吧

Description

国际大学生程序设计竞赛已经发展成为最具影响力的大学生计算机竞赛,ACM-ICPC以团队的形式代表各学校参赛,每队由3名队员组成,一个队每做出来一个题该队就会获得该题对应颜色的气球,气球越多就说明该队做的题目越多。当然如果一个颜色的气球越多就说明该气球对应的题也就越简单。现在给你很多很多的颜色的气球,问你那个颜色的气球最多,哈哈,聪明的acmer这题对你肯定很简单吧, just ac it!

Input

假设只有6种颜色,green,red,blue,pink,orange,black。输入数据有多组,每组数据开始给出一个整数n代表接下来有n个气球,接下来有n行,每行输入一种颜色,n <= 100,输入以EOF结束。

Output

输出个数最多的气球的颜色(题目保证个数最多的气球有且仅有一种颜色)

Sample Input

3
green
red
green
5
green
red
blue
red
red

Sample Output

green
red
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{char b[6][10]= {"red","green","blue","pink","black","orange"};int n;while(scanf("%d",&n)!=EOF){int res[6]= {0};int k;for(k=0; k<n; k++){char a[10];scanf("%s",a);int i;for(i=0; i<6; i++){if(strcmp(b[i],a)==0)res[i]++;}}int num=0,max=res[0];int j;for(j=1; j<6; j++){if(max<res[j]){max=res[j];num=j;}}printf("%s\n",b[num]);}return 0;
}

改进

#include <iostream>
#include <map>
#include <string>
using namespace std;int main() {int n;string color;map<string, int> color_count;while (scanf("%d",&n)!=EOF) {color_count.clear();for (int i = 0; i < n; i++) {cin>>color;color_count[color]++;}string max_color = "";int max_count = 0;for (const auto &p : color_count) {if (p.second > max_count) {max_count = p.second;max_color = p.first;}}cout << max_color << endl;}return 0;
}

4.Google is Feeling Lucky

描述

        谷歌是最著名的互联网搜索引擎之一,它托管和开发了许多基于互联网的服务和产品。在其搜索引擎网站上,一个有趣的按钮“我感觉很幸运”吸引了我们的眼球。该功能可以允许用户跳过搜索结果页面,直接进入排名第一的页面。


        太神了它节省了很多时间。


        问题是,当一个人键入一些关键词并按下“我感觉很幸运”按钮时,会出现哪个网页?谷歌做了很多工作,并提出了很好的方法来处理它。在这个简化的问题中,让我们只考虑谷歌为每个网页分配一个整数值的相关性。将选择最相关的页面。如果出现平局,则可以选择相关性最高的所有页面。


        你的任务很简单,给定10个网页及其相关性。只要挑选出所有可能的候选人,当“我感到幸运”时就会提供给用户。

输入

输入包含多个测试用例。测试用例的数量T在输入文件的第一行中。
对于每个测试用例,有10行描述网页和相关性。每一行都包含一个字符串,没有任何空白字符表示该网页的URL,以及一个整数Vi表示该网页相关性。URL的长度介于1和100之间(包括1和100)。(1<=Vi<=100)

输出

对于每个测试用例,输出几行,这些行是可以选择的网页的URL。URL的顺序与输入的顺序相同。
有关输出格式的更多信息,请查看示例输出。

样本输入

2
www.youtube.com 1
www.google.com 2
www.google.com.hk 3
www.alibaba.com 10
www.taobao.com 5
www.bad.com 10
www.good.com 7
www.fudan.edu.cn 8
www.university.edu.cn 9
acm.university.edu.cn 10


www.youtube.com 1
www.google.com 2
www.google.com.hk 3
www.alibaba.com 11
www.taobao.com 5
www.bad.com 10
www.good.com 7
www.fudan.edu.cn 8
www.university.edu.cn 9
acm.university.edu.cn 10


样本输出

案例1:
www.alibaba.com
www.bad.com
acm.university.edu.cn
案例2:
www.alibaba.com

方法一

#include <bits/stdc++.h>
using namespace std;
int main()
{int t;cin>>t;int n=1;while(t--){char ch[12][120];int num[12];for(int i=1; i<=10; i++)cin>>ch[i]>>num[i];int maxn=-999999;for(int i=1; i<=10; i++){if(num[i]>maxn)maxn=num[i];}printf("Case #%d:\n",n);n++;for(int i=1; i<=10; i++)if(num[i]==maxn)cout<<ch[i]<<endl;}return 0;
}

 方法二

#include <iostream>
#include <algorithm>
#include <string>using namespace std;struct WebPage {string url;int relevance;
};bool compare(const WebPage &a, const WebPage &b) {if (a.relevance == b.relevance) {return a.url < b.url;}return a.relevance > b.relevance;
}int main() {int T;cin >> T;for (int t = 0; t < T; ++t) {WebPage webPages[10];for (int i = 0; i < 10; ++i) {cin >> webPages[i].url >> webPages[i].relevance;}sort(webPages, webPages + 10, compare);cout << "Case #" << t + 1 << ":" << endl;cout << webPages[0].url << endl;for (int i = 1; i < 10; ++i) {if(webPages[i].relevance == webPages[0].relevance)cout << webPages[i].url << endl;}cout << endl;}return 0;
}

5.数字排序

Description

现在给出一个不超过1000个数字(允许重复),小新想知道其中的数字
是第几小的数,例如给出5 4 4 2 1,1就是第一小的数,4就是第3小的数,5
就是滴小的数。

Input

多组样例。每组第一行是一个整数n,跟着n(n <= 1000)个整数(a1,a2,a3,……,an),
第二行一个整数m( m < 100)表示将要询问的次数,跟着m个整数(b1,b2,b3……,bn)

Output

对于每次询问输出一行,表示bi(i >= 1&& i <= m)是第几小的数,如果aj(j >= 1 && j <= n)中
不存在bj则直接输出-1.

Sample Input

5 5 4 4 2 1
3 1 4 5
3 1 3 2
3 1 4 2

Sample Output

1
3
4
1
-1
2
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
set<int> vis;
set<int>::iterator it;
int main()
{int i,j,m,n,flag,k;while(cin>>n){vis.clear();for(i=1;i<=n;i++){cin>>m;vis.insert(m);}cin>>m;int p;for(i=1;i<=m;i++){flag=-1;cin>>p;for(it=vis.begin(),k=1;it!=vis.end();it++,k++){if(p==*it){flag=k;break;}}cout<<flag<<endl;}}return 0;
}

 

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

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

相关文章

汽车标定技术(十)--从CPU角度观察Overlay实现原理

目录 1.问题引入 2.功能概述 2.1 P1X 标定功能 2.2 MPC57xx标定功能 2.3 TC3xx标定功能 3.问题分析 3.1 英飞凌CPU子系统猜想 3.2 ARM内核CPU子系统分析 4.小结 1.问题引入 在分析瑞萨RH850-P1x系列、NXP S32K3系列和英飞凌TC3xx系列对标定测量功能的实现时&#xf…

vue2全局混入正确使用场景和错误场景示例

全局混入在 Vue.js 中的使用场景需要谨慎考虑&#xff0c;因为它会影响所有组件。以下是一些正确和错误的使用场景的例子&#xff1a; 正确的使用场景&#xff1a; 全局工具方法&#xff1a; // 正确的使用场景 Vue.mixin({methods: {$formatDate: function (date) {// 格式化…

区块链技术与应用 【全国职业院校技能大赛国赛题目解析】第四套区块链应用后端开发

第四套区块链应用后端开发 环境 : ubuntu20 fisco : 2.8.0 springboot 2.1.1 fisco-java-sdk: 2.7.2 maven 3.8.8 前言 这套后端样题,只涉及调用fisco的系统接口,不涉及此食品溯源项目的业务接口,所以我就直接生成一个springboot项目进行完成此题目。 请提前准备好一…

P29 C++箭头运算符以及它对于结构体与类的指针关系

本期的主要内容是箭头运算符以及它对于结构体与类的指针可以做什么&#xff0c;最后实现我们自己的运算符重载。 01 为什么要使用运算符重载 从开发的角度而言&#xff0c;运算符重载的存在是为了提高开发效率&#xff0c;增加代码的可复用性&#xff0c;很多时候简化了代码。…

C#,《小白学程序》第二十三课:大数的除法(BigInteger Divide)

1 文本格式 /// <summary> /// 比较a&#xff0c;b的大小&#xff0c;返回1&#xff0c;0&#xff0c;-1 /// 数据从低位&#xff08;右&#xff09;往高位&#xff08;左&#xff09;存储; /// </summary> /// <param name"a"></param> ///…

1.自动化运维工具Ansible的安装

1.物料准备 四台服务器&#xff0c;其中一个是主控机&#xff0c;三个为host 2.安装 在主控机上安装ansible 2.1 设置EPEL仓库 Ansible仓库默认不在yum仓库中&#xff0c;因此我们需要使用下面的命令启用epel仓库。 yum install epel-release -y2.2 执行安装命令 yum i…

【linux】服务器CPU占用50%,top/htop/ps却看不到异常进程?使用unhide可以查看!

问题描述 htop发现前32个核全被占满了&#xff0c;但是却找不到对应进程号 查杀 治标&#xff1a;杀死隐藏进程 1、unhide 安装unhide apt-get install unhideunhide使用 unhide proc果然发现了隐藏进程 kill -9 kill -9 [pid]这么多pid号&#xff0c;我这边杀了其中…

Log4j

通过Log4j&#xff0c;我们可以控制日志信息输送到目的地是控制台、文件、GUI组件&#xff0c;甚至是套接口服务器、NT的事件记录器。我们可以控制每一条日志的输出格式。通过定义每一条日志信息的级别&#xff0c;能更加细致地控制日志的生成过程。 1 log4j、log4j2与SLF4J …

Django 通过 Trunc(kind) 和 Extract(lookup_name) 参数进行潜在 SQL 注入 (CVE-2022-34265)

漏洞描述 Django 于 2022 年6月4 日发布了一个安全更新&#xff0c;修复了 Trunc&#xff08;&#xff09; 和 Extract&#xff08;&#xff09; 数据库函数中的 SQL 注入漏洞。 参考链接&#xff1a; Django security releases issued: 4.0.6 and 3.2.14 | Weblog | Djang…

【ArcGIS Pro微课1000例】0037:ArcGIS Pro中模型构建器的使用---以shp批量转kml/kmz为例

文章目录 一、ArcGIS Pro模型构建器介绍二、shp批量转kml/kmz1. 打开模型构建器2. 添加工作空间4. 添加【创建要素图层】工具5. 添加【图层转kml】工具6. 输出文件命名7. 运行模型三、模型另存为1.py文件2. 保存为工具一、ArcGIS Pro模型构建器介绍 模型构建器是一种可视化编程…

使用qemu调试arm内核

参考书籍《奔跑吧Linux内核》–笨叔 下载Linux-5.0源码 https://benshushu.coding.net/public/runninglinuxkernel_5.0/runninglinuxkernel_5.0/git/files或者直接git源码 git clone https://e.coding.net/benshushu/runninglinuxkernel_5.0/runninglinuxkernel_5.0.git安装必…

TypeScript 5.3

导入属性 TypeScript 5.3支持导入属性提案的最新更新。 导入属性的一个用例是向运行库提供有关模块预期格式的信息。 // We only want this to be interpreted as JSON, // not a runnable/malicious JavaScript file with a .json extension. import obj from "./somet…

处理分类问题的不平衡数据的 5 种技术

一、介绍 分类问题在机器学习领域很常见。正如我们所知&#xff0c;在分类问题中&#xff0c;我们试图通过研究输入数据或预测变量来预测类标签&#xff0c;其中目标或输出变量本质上是分类变量。 如果您已经处理过分类问题&#xff0c;那么您一定遇到过以下情况&#xff1a;其…

Netty Review - 探索Pipeline的Inbound和Outbound

文章目录 概念Server CodeClient CodeInboundHandler和OutboundHandler的执行顺序在InboundHandler中不触发fire方法InboundHandler和OutboundHandler的执行顺序如果把OutboundHandler放在InboundHandler的后面&#xff0c;OutboundHandler会执行吗 概念 我们知道当boss线程监控…

[ACTF2020 新生赛]BackupFile

打开题目就一句话&#xff1a;尝试找到源文件 和上一题一样&#xff0c;用dirsearch扫描网站找到了一下内容 flag.php&#xff0c;0B&#xff0c;虚假flag 瞅一眼index.php.bak是啥 下载了一个文件&#xff0c;把bak后缀删掉&#xff0c;打开了index.php源码 is_numeric()&am…

【驱动】串口驱动分析(二)-tty core

前言 tty这个名称源于电传打字节的简称&#xff0c;在linux表示各种终端&#xff0c;终端通常都跟硬件相对应。比如对应于输入设备键盘鼠标&#xff0c;输出设备显示器的控制终端和串口终端。也有对应于不存在设备的pty驱动。在如此众多的终端模型之中&#xff0c;linux是怎么…

uniapp IOS从打包到上架流程(详细简单)

​ uniapp IOS从打包到上架流程&#xff08;详细简单&#xff09; 原创 1.登入苹果开发者网站&#xff0c;打开App Store Connect ​ 2.新App的创建 点击我的App可以进入App管理界面&#xff0c;在右上角点击➕新建App 即可创建新的App&#xff0c;如下图&#xff1a; ​ 3.…

FFmpeg命令分隔视频

有一个视频如a.mp4&#xff0c;此视频采用帧率为30生成&#xff0c;共有299帧&#xff0c;这里通过FFmpeg命令分隔成1秒一个个的小视频&#xff0c;即每个小视频帧数为30帧。 用到的FFmpeg参数如下所示&#xff1a; (1).-i:指定输入视频文件的名称&#xff1b; (2).-c:指…

人工智能驱动的医疗辅助:陪诊系统的技术原理与应用

随着人工智能技术的不断发展&#xff0c;医疗领域也迎来了新的可能性。本文将深入探讨陪诊系统的技术原理及其在医疗领域中的应用。我们将重点关注人工智能的核心概念&#xff0c;如自然语言处理、机器学习和语音识别&#xff0c;以解释陪诊系统是如何在医疗环境中发挥作用的。…

Linux:文件系统初步理解

文章目录 文件的初步理解C语言中对文件的接口系统调用的接口位图的理解open调用接口 文件和进程的关系进程和文件的低耦合 如何理解一切皆文件&#xff1f; 本篇总结的是关于Linux中文件的各种知识 文件的初步理解 在前面的文章中有两个观点&#xff0c;1. 文件 内容 属性&…