C++信奥之径,锻炼思维,扎实算法——排序算法(3)

360影视 2025-01-19 05:37 2

摘要:题目的本质其实是在n个数字中找最大值,但是由于数字会很大,可能到100位数字,因此可能会需要写高精度。

宇宙总统

题目描述

算法解析

题目的本质其实是在n个数字中找最大值,但是由于数字会很大,可能到100位数字,因此可能会需要写高精度。

但是本题由于只是比大小,完全可以将数据用字符串来存储,通过字符串来比大小。但是有读者可能会问了:这不是排序题单中的题吗?跟排序有什么关系呢?因此下面将给出2种解题思路。

(1)存储字符串找最大值

与纯数字一样,使用擂台法找出字符串中最大的数字。最大的字符串数字一定是字符串长度最长,且字典序最大的那个,并存储其对应的下标。

【参考代码】

#include#includeusing namespace std; string a[25];int main{ int n; cin>>n; for(int i=1;i>a[i]; } int max=1; //假设第1个数字最大 for(int i=2;it)continue; //max的长度较长,直接下一个数字 else if(s

(2)进行结构体排序,输出第一项

由于在比较过程中,需要比较长度和字典序,同时记录最大值的下标,因此可以使用结构体存储数据,每次存放数字的序号、原始值和长度,进行结构体排序,最后输出排序后的第一项即可。

【参考代码】

#include#includeusing namespace std; struct PIAO{ int id; string data; int len;}a[25];bool cmp(PIAO x,PIAO y){ if(x.len!=y.len)return x.len>y.len; else return x.data>y.data;}int main{ int n; cin>>n; for(int i=1;i>a[i].data; a[i].id=i; a[i].len=a[i].data.size; } sort(a+1,a+n+1,cmp); cout

代码中的C++知识解读

字典序比较

字典序,又称词典顺序或字母顺序,是按照字母顺序排列单词的方式。例如4个单词:“apple”、“banana”、“bag”、“cat”,他们按照字典序的排序结果是:

“apple”

“bag”

“banana”

“cat”

排序规则是:首先按第1个字母的顺序排列,如果相同,再看第2个字母的顺序,以此类推。对于“bag”和“banana”,由于前两个字母相同,第三个字母“g”

如果修改三个单词:“Banana”、“Cat”和“6a9”,那么数字和大小写字母该怎么排序呢?我们先给出结果:

“6a9”

“Banana”

“Cat”

“apple”

我们发现,数字,是不是和ASCII码的规则一样呢?因此我们可以大致使用ASCII码的知识来记忆字典序的排序方式。

在C++中,有三种可以比较字符串字典序的方法:

(1)strcmp(s1,s2)

在C语言中,可以使用strcmp(s1,s2)函数比较两个字符数组型字符串的字典序(即大小)。如果要在C++使用,需要添加头文件#include。

当s1

当s1>s2时,函数返回1;

当s1==s2时,函数返回0。

例如:

char s1[10]="apple";char s2[10]="banana";cout

运行结果为:

(2)compare

在C++中,头文件中有compare函数来比较string类型和字符数组类型的字符串的字典序(即大小),返回值与strcmp一致。

使用方法:

string s1="apple";string s2="banana";cout

(3)关系运算符

C++中直接有重载了“

char s1[10]="apple";cout

运行结果

来源:小红课堂

相关推荐