**求解两种排序方法问题**
【问题描述】考拉有几个字符串。考拉最近在学习两种字符串的排序方法。
(1)根据字符串的字典序排序:例如”car”<”carriage”<”cats”<”doggies<”koala”。
(2)根据字符串的长度排序(相同长度随意):例如”car”<”cats”<”koala”<”doggies”<”carriage”。
考拉想知道自己的这些字符串的排列顺序是否满足这两种排序方法,但考拉又要忙着吃树叶,所以需要你来帮忙验证。
输入描述:输入的第1行为用例数,接下来是每两行一个例子。每个例子的第一行是字符串的个数N(N≤100),接下来的一行 N个字符串,以空格隔开,字符串长度都小于100,均由大小写字母和可显符号组成。
输出描述:如果这些字符串是根据字典序排列而不是根据长度排列,输出“islexicalorder”;如果是根据长度排列而不是根据字典序排列,输出“lengths”;如果两种方式都符合,输出“both”,否则输出“none”。每个例子占一行,最后一个例子也有回车。
样例输入:
2
3
aaa bb c
4
c aa bbb aaaa
样例输出:
islexicalorder
lengths
代码:
#include<iostream>
#include<string>
#define Max 100
using namespace std;
//判断是否是字典序排序
int judgeLexicalorder(string s[],int n);
//判断是否是长度排列
int judgeLengths(string s[],int n);
int main()
{
int n,k,g;
string s[Max],t[Max];
cin>>k;
g=k;
while(k--)
{
cin>>n;
for(int i=0;i<n;i++)
{
cin>>s[i];
}
if(judgeLexicalorder(s,n) && judgeLengths(s,n))
{
t[k+1]="both";
}else if(judgeLexicalorder(s,n))
{
t[k+1]="islexicalorder";
}else if(judgeLengths(s,n))
{
t[k+1]="lengths";
}else
{
t[k+1]="none";
}
}
for(int i=g;i>=1;i--)
{
cout<<t[i]<<endl;
}
return 0;
}
int judgeLexicalorder(string s[],int n)
{
if(n==0)
{
return 0;
}
for(int i=0;i<n-1;i++)
{
if(s[i]>s[i+1])
{
return 0;
}
}
return 1;
}
int judgeLengths(string s[],int n)
{
if(n==0)
{
return 0;
}
for(int i=0;i<n-1;i++)
{
if(s[i].length()>s[i+1].length())
{
return 0;
}
}
return 1;
}
运行截图如下: