编程练习————part1

一.

题目:考拉有n个字符串字符串,任意两个字符串长度都是不同的。考拉最近学习到有两种字符串的排序方法: 1.
根据字符串的字典序排序。例如:
“car” < “carriage” < “cats” <
"doggies < “koala”
2.根据字符串的长度排序。例如:
“car” < “cats” < “koala” <
“doggies” < “carriage”
考拉想知道自己的这些字符串排列顺序是否满足这两种排序方法,考拉要忙着吃树叶,所以需要你来帮忙验证

输入第一行为字符串个数n(n ≤ 100)
接下来的n行,每行一个字符串,字符串长度均小于100,均由小写字母组成
输出描述:
如果这些字符串是根据字典序排列而不是根据长度排列输出"lexicographically",
如果根据长度排列而不是字典序排列输出"lengths",
如果两种方式都符合输出"both",否则输出"none"

思路:这道题主要是写出两个排序即可

代码

#include 
#include 
#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;
}

你可能感兴趣的:(编程练习————part1)