旧岛听风orz 2021-10-23 17:03 采纳率: 100%
浏览 75
已结题

数据结构顺序链栈的实际问题

7-1 找寻密码 (50 分)
这是一个密码问题,密码由10个小写字母构成,这10个密码均从所有的小写字母中按规律查找,其规律是:所有的字母按字典序从'a'~'z'排列从头开始进行1到n报数,凡是报到n的字母出列,剩下的向小序号方向靠拢,再从头开始进行1到(n+1)报数,凡报到(n+1)的出列,剩下的向小序号方向靠拢,以后一次从头开始轮流进行1到n、1到(n+1)报数,直到得到出列的字母有10个为止,这些字母就是所需要的密码。

输入格式:
输入奇数次报数的出列序号n。

输出格式:
输出10个字母密码

输入样例:
在这里给出一组输入。例如:

5
输出样例:
在这里给出相应的输出。例如:

ejotygnvfm

  • 写回答

1条回答 默认 最新

  • 旧岛听风orz 2021-10-29 23:40
    关注

    #include<stdio.h>
    #include<malloc.h>
    typedef struct list
    {
    char letter;
    struct list* next;
    }list;
    typedef struct list* listptr;
    void ReadList(struct list*P)
    {
    char n;
    listptr P0;
    P0 = P;
    for (n = 'a';n <= 'z';n++)
    {
    listptr P1;
    P1= (listptr)malloc(sizeof(struct list));P1->next = NULL;
    P1->letter = n;
    P0->next = P1;
    P0 = P1;
    }
    }
    void find(listptr P, int n)
    {
    int cout = 1, num = 0;
    listptr P0;
    P0 = P;
    while(num<10)
    {
    if (cout)
    {
    int i = 1;
    while ((P->next))
    {
    if (i == n)
    {
    listptr P1;
    P1 = P->next;
    printf("%c", P1->letter);
    P->next = P1->next;
    free(P1);
    num++;
    cout = 0;
    i = 1;
    }
    else
    {
    i++;
    P = P->next;
    }
    if (num == 10)break;

            }
            
        }
        else
        {
            int i = 1;
            while ((P->next))
            {
                if (i == n+1)
                {
                    listptr P1;
                    P1 = P->next;
                    printf("%c", P1->letter);
                    P->next = P1->next;
                    free(P1);
                    num++;
                    cout = 1;
                    i = 1;
                }
                else
                {
                    i++;
                    P = P->next;
                }
                if (num == 10)break;
            }
        }
        P = P0;
    }
    

    }
    int main()
    {
    int n;
    scanf("%d", &n);
    listptr P;
    P=(listptr)malloc(sizeof(struct list));P->next=NULL;
    ReadList(P);
    find(P,n);
    }

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 11月6日
  • 已采纳回答 10月29日
  • 创建了问题 10月23日