摘要:题目的本质其实是在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运行结果
来源:小红课堂