高分求解一道字符串问题

定义有重复子串的字符串为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;
}