声明
考虑一个长度为N的字符串,仅由小写字母a-z组成。设s[i]
为字符串中第i个位置的字符(从1开始)。如果i(1 <= i < N
)的确切K值为s[i+1]<s[i]
(我们假设为'a'<'b'<'c'<...<'z'
),则该字符串为K字符串。给定K,找到最短的K字符串。如果有多个解决方案,请找到按字典顺序排列的最早的K字符串。
输入
第一行包含测试用例T的数量(1 <= T <= 100)。每个测试用例包含一个整数K(≤100)。 输出
输出
T行,每个测试用例一行,包含所需的字符串。仅使用小写字母a-z。
我无法理解的是27到100的情况。我可以简单地使用char数组来计算问题 这不是整个算法。我还在努力......
#include<iostream>
using namespace std;
int main()
{
char s[]={'0','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
int k;
cin>>k;
for(int i=k;i>=1;i--)
{
//cout<<s[i+1]<<">"<<s[i];
if(s[i+1]>s[i])
cout<<s[i];
}
system("pause");
return 0;
}
答案 0 :(得分:1)
最短,然后是词典最早。
所以解决方案将是:
答案 1 :(得分:0)
对于26,你可以这样做:
a,b,... z,a,b
但我认为最佳解决方案是:
a,b,a,b,... z
一般来说,我认为你需要首先进行“小”运行,然后进行全部运行。