一.
题目:考拉有n个字符串字符串,任意两个字符串长度都是不同的。考拉最近学习到有两种字符串的排序方法: 1.
根据字符串的字典序排序。例如:
“car” < “carriage” < “cats” <
"doggies < “koala”
2.根据字符串的长度排序。例如:
“car” < “cats” < “koala” <
“doggies” < “carriage”
考拉想知道自己的这些字符串排列顺序是否满足这两种排序方法,考拉要忙着吃树叶,所以需要你来帮忙验证
输入第一行为字符串个数n(n ≤ 100)
接下来的n行,每行一个字符串,字符串长度均小于100,均由小写字母组成
输出描述:
如果这些字符串是根据字典序排列而不是根据长度排列输出"lexicographically",
如果根据长度排列而不是字典序排列输出"lengths",
如果两种方式都符合输出"both",否则输出"none"
思路:这道题主要是写出两个排序即可
代码:
#include <iostream>
#include <string>
#define MAX 100
using namespace std;
bool lexicographically(string s[],int n)
{
if(n==0)
return false;
for(int i =0;i<n-1;i++)
{
if(s[i]>s[i+1])
return false;
}
return true;
}
bool lengths(string s[],int n)
{
if(n==0)
return false;
for(int i =0;i<n-1;i++)
{
if(s[i].size()>s[i+1].size())
return false;
}
return true;
}
int main()
{
int n = 0;
cin>>n;
string s[MAX];
for(int i = 0;i<n;i++)
cin>>s[i];
if(lexicographically(s,n)&&lengths(s,n))
cout<<"both"<<endl;
else if(lexicographically(s,n))
cout<<"lexicographically"<<endl;
else if(lengths(s,n))
cout<<"lengths"<<endl;
else
cout<<"none"<<endl;
return 0;
}
二.
题目:请编写一个函数计算n x m的棋盘格子,沿着各自边缘线从左上角走到右下角,总共有多少种走法,要求不能走回头路,即:只能往右和往下走,不能往左和往上走。
解题思路:
①当n=1时,总共有m+1种走法。
②当m=1时,总共有n+1种走法。
前两种总结起来,当n=1或者m=1时,总共有m+n种走法。
③当n>1,m>1时,如果从左上角走到n,m位置,有Sum(n.m)走法,那么从左上角走到右下角一共有
Sum(n-1,m)+Sum(n,m-1)种走法。
总结:我们可以使用递归解决问题。当n=1或m=1作为结束标志
代码:
int Sum(int n,int m)
{
if(n>1&&m>1)
return Sum(n-1,m)+Sum(n,m-1);
else if(n==1||m==1)
return n+m;
}
int main()
{
int n = 0;
int m = 0;
while(cin>>n>>m)
{
cout<<Sum(n,m)<<endl;
}
return 0;
}