玉面小蛟龙


私信TA

用户名:2410056091

访问量:16054

签 名:

等  级
排  名 251
经  验 5958
参赛次数 46
文章发表 51
年  龄 0
在职情况 学生
学  校
专  业

  自我简介:

#include <iostream>

#include <stdio.h>

#include <math.h>

#include <algorithm>

#include <string.h> 

using namespace std;

int n,a[27],s,t;

char c[26];

int d[26],l=0;

int x,y;

bool setNum1(int x){

int i=0,j=0;

if(a[d[x]+1]==0&&d[x]+1>=s&&d[x]+1<=t)//在范围内并且没有用过,并且下一个可以被选择 

{

a[d[x]]=0;//将原来的置零,表示没用过 

d[x]=d[x]+1;

a[d[x]]=1;//置1,表示用1  

for(int y=x+1;y<l;y++)//只有有一个能够往上面加1,后面的数就都能够在不重复的情况下变小 

{

a[d[y]]=0;//清零 

d[y]=d[y-1]+1;//变为上一个的加一 

a[d[y]]=1;//置一 

}

return true;

}

else return false;

int main(){

scanf("%d%d%d",&s,&t,&l);

getchar();

scanf("%s",&c);

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

{

d[i]=c[i]-'a'+1;// 转换为数字处理 

a[c[i]-'a'+1]=1;//出现过的数字置一 

}

for(int j=0;j<5;j++)//5个 

{

for(int x=l-1;x>=0;x--)//从后往前找 

{

if(setNum1(x))//能够设置 

{

for(int y=0;y<l;y++)//输出 

{

printf("%c",d[y]+'a'-1);

}

printf("\n");

break; //已经变化一次,跳出循环 

}

}

}

return 0;

}


 

0.0分

0 人评分

  评论区

  • «
  • »