解题思路:先找到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分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复