定义有重复子串的字符串为M串如:AA;无重复子串的为N串如:AB,输入正数K和L,输出由前L个字符组成字典序第k小的N串,如L=3时,前三个N串为:A,AB,ABA,输入不超过50字符,例:输入:5 3;输出:ABACA
int dfs(int cur)
{
if(cnt++ == n)
{for(int i = 0; i < cur; i++) printf("%c",'A'+s[i]);
printf("\n");
return 0;
}
for(int i = 0;i < L; i++)
{
S[cur] = i;
int ok = 1;
for(int j = 1; j*2 <= cur+1; j++)
{
int equal = 1;
for(int k = 0; k < j; k++)
if(S[cur-k] != S[cur-k-j]) { equal = 0; break; }
if(equal) {ok = o; break; }
}
if(ok) if(!dfs(cur=1)) return 0;
}
return 1;
}
不太明白你说的意思,所以不知道写的对不对,你试试吧
#include
#include
using namespace std;
const char FIRSTCH = 'A';
int main()
{
cout << "请输入正数K和L,以空格分隔(请注意,K不能大于2*L-1, L最大为26,最小为1):" << endl;
int K, L;
char tempCh = FIRSTCH;
while(1)
{
cin >> K >> L;
if(cin.fail() || L < 1 || K > (2 * L - 1) || L > 26)
{
cout << "输入有误,请重新输入" << endl;
cout << "请输入正数K和L,以空格分隔(请注意,K不能大于2*L-1, L最大为26,最小为1):" << endl;
continue;
}
break;
}
for(int i = 0; i < K; i++)
{
if(i % 2 == 0)
cout << FIRSTCH;
else
cout << (char)(++tempCh);
}
cout << endl;
system("PAUSE");
return 0;
}
上个代码粘的有问题,再回答一次
#include <iostream>
#include <string>
using namespace std;
const char FIRSTCH = 'A';
int main()
{
cout << "请输入正数K和L,以空格分隔(请注意,K不能大于2*L-1, L最大为26,最小为1):" << endl;
int K, L;
char tempCh = FIRSTCH;
while(1)
{
cin >> K >> L;
if(cin.fail() || L < 1 || K > (2 * L - 1) || L > 26)
{
cout << "输入有误,请重新输入" << endl;
cout << "请输入正数K和L,以空格分隔(请注意,K不能大于2*L-1, L最大为26,最小为1):" << endl;
continue;
}
break;
}
for(int i = 0; i < K; i++)
{
if(i % 2 == 0)
cout << FIRSTCH;
else
cout << (char)(++tempCh);
}
cout << endl;
system("PAUSE");
return 0;
}