why_i6
why_i6
采纳率100%
2016-01-04 03:29

高分求解一道字符串问题

126
已采纳

定义有重复子串的字符串为M串如:AA;无重复子串的为N串如:AB,输入正数K和L,输出由前L个字符组成字典序第k小的N串,如L=3时,前三个N串为:A,AB,ABA,输入不超过50字符,例:输入:5 3;输出:ABACA

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

3条回答

  • xin_o xin_o 5年前

    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;
    }

    点赞 2 评论 复制链接分享
  • w442863748 任飘萍 5年前

    上个代码粘的有问题,再回答一次

    #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;
    }
    
    点赞 评论 复制链接分享
  • w442863748 任飘萍 5年前

    不太明白你说的意思,所以不知道写的对不对,你试试吧

    #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;
    

    }

    点赞 评论 复制链接分享

为你推荐