天梯赛 L1-2 倒数第N个字符串 C++代码

题目描述

给定一个完全由小写英文字母组成的字符串等差递增序列,该序列中的每个字符串的长度固定为 L,从 L 个 a 开始,以 1 为步长递增。例如当 L 为 3 时,序列为 { aaa, aab, aac, …, aaz, aba, abb, …, abz, …, zzz }。这个序列的倒数第27个字符串就是 zyz。对于任意给定的 L,本题要求你给出对应序列倒数第 N 个字符串。

输入格式:

输入在一行中给出两个正整数 L(2 ≤ L ≤ 6)和 N(≤10​^5)。

输出格式:

在一行中输出对应序列倒数第 N 个字符串。题目保证这个字符串是存在的。

输入样例:

3 7417

输出样例:

pat

代码(PAT已通过测试)

#include <iostream>
#include <string>
using namespace std;
//数据规模L(2 ≤ L ≤ 6)和 N(≤10​^5),当L=2时候,有26*26种可能,L=3时候26*26*26=17576  L=6时 26^6=308915776
//由于N(≤10​^5),所以应该逆序构造,列入当L=26时候,第一个位zzz  第二个zzy 第三个 zzw 知道第N个
int main() 
{
	int num,n;
	cin>>num>>n; 
	string ans("");
	int times=0;

	cout<<ans;
	
    if(num==2)
    {
    		for(char a='z';a>='a';a--)
    		{
    			for(char b='z';b>='a';b--)
    			{
                    times++;
    				if(times==n) 
    				{
    					ans.push_back(a);
    					ans.push_back(b);
    					cout<<ans;
    					return 0;
    				}
    			}
    		}
    }
    
    if(num==3)
    {
    		for(char a='z';a>='a';a--)
    		{
    			for(char b='z';b>='a';b--)
    			{
    				for(char c='z';c>='a';c--)
    				{
    					times++;
    					if(times==n) 
    					{
    						ans.push_back(a);
    						ans.push_back(b);
    						ans.push_back(c);							    						
    						cout<<ans;
    						return 0;
    					}	
    				}

    			}
    		}
    }

    if(num==4)
    {
     		for(char a='z';a>='a';a--)
    		{
    			for(char b='z';b>='a';b--)
    			{
    				for(char c='z';c>='a';c--)
    				{
    	            	for(char d='z';d>='a';d--)
    	            	{
    	            		times++;
    	            		if(times==n)
    	            		{
    	            			ans.push_back(a);
    	            			ans.push_back(b);
    	            			ans.push_back(c);
    	            			ans.push_back(d);
								cout<<ans;
    	            			return 0;
    	            		}
    	            	}
    				}

    			}
    		} 	
    }
    
    if(num==5)
    {
     		for(char a='z';a>='a';a--)
    		{
    			for(char b='z';b>='a';b--)
    			{
    				for(char c='z';c>='a';c--)
    				{
    	            	for(char d='z';d>='a';d--)
    	            	{
    	            		for(char e='z';e>='a';e--)
    	            		{
    	            			times++;
    	            			if(times==n)
    	            			{
    	            				ans.push_back(a);
    	            				ans.push_back(b);
    	            				ans.push_back(c);
    	            				ans.push_back(d);
    	            				ans.push_back(e);
									cout<<ans;
    	            				return 0;
    	            			}
    	            		}
    	            	}
    				}

    			}
    		}      	
    }
    
    if(num==6)
    {
     		for(char a='z';a>='a';a--)
    		{
    			for(char b='z';b>='a';b--)
    			{
    				for(char c='z';c>='a';c--)
    				{
    	            	for(char d='z';d>='a';d--)
    	            	{
    	            		for(char e='z';e>='a';e--)
    	            		{
    	            			for(char f='z';f>='a';f--)
    	            			{
    	            				times++;
    	            				if(times==n)
    	            				{
    	            					ans.push_back(a);
    	            					ans.push_back(b);
    	            					ans.push_back(c);
    	            					ans.push_back(d);
    	            					ans.push_back(e);
    	            					ans.push_back(f);
    	            					cout<<ans;
    	            					return 0;
    	            				}
    	            			}
    	            		}
    	            	}
    				}

    			}
    		}      	
    }
    return 0;
}

版权声明:本文为qq_43037249原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。