二猛


私信TA

用户名:ermeng

访问量:3040

签 名:

等  级
排  名 13381
经  验 888
参赛次数 0
文章发表 4
年  龄 20
在职情况 学生
学  校 NUDT
专  业 物理

  自我简介:

TA的其他文章

解题思路:先找到jam数的规律: 如果长度为三,只用abcde五个字母,并用12345代替,则所有数为123 124 125 134 135 145 234 235 245 345 即 abc abd abe acd ace ade bcd bce bde cde; 

   所以要找到下一个数,需要从最右边一位看(把上述abcde叫做字母组), 如果不是字母组中最后一个,则最右边一位加1即可  ,  如果是字母组中最后一个,则看右边数第二位,如果不是字母组中倒第二个,则此一位加1,最后一位改成倒第二位加1,以此类推......

   下面两个函数 have判断是否存在下一个jam数, coutnext输出下一个jam数


注意事项:

参考代码:

#include<iostream>

using namespace std;


bool have(char jam[],char last[],int w);

void coutnext(char jam[],int t,int w);


int main()

{

    int s,t,w;

    cin>>s>>t>>w;

    char jam[26];

    cin>>jam;


    char last[26]= {'\0'};

    for(int i=0; i<w; i++)

    {

        last[i]='a'+t-w+i;

    }


    int n=0;

    while(have(jam,last,w) && n<5)

    {

        coutnext(jam,t,w);

        n++;

    }


    return 0;

}


bool have(char jam[],char last[],int w)

{

    for(int i=0; i<w; i++)

    {

        if(jam[i]!=last[i])

        {

            return true;

        }

    }

    return false;

}


void coutnext(char jam[],int t,int w)

{

    for(int i=w-1; i>=0; i--)

    {

        if(jam[i]-'a'<t-w+i)

        {

            jam[i]++;

            for(int j=i; j<w; j++)

            {

                jam[j]=jam[i]+(j-i);

            }

            break;

        }

    }

    cout<<jam<<endl;

}


 

0.0分

2 人评分

  评论区