题目如下:
找寻密码
这是一个密码问题,密码由10个小写字母构成,这10个密码均从所有的小写字母中按规律查找,其规律是:所有的字母按字典序从'a'~'z'排列从头开始进行1到n报数,凡是报到n的字母出列,剩下的向小序号方向靠拢,再从头开始进行1到(n+1)报数,凡报到(n+1)的出列,剩下的向小序号方向靠拢,以后依次从头开始轮流进行1到n、1到(n+1)报数,直到得到出列的字母有10个为止,这些字母就是所需要的密码。
输入格式:
输入奇数次报数的出列序号n。
输出格式:
输出10个字母密码
输入样例:
在这里给出一组输入。例如:
5
输出样例:
在这里给出相应的输出。例如:
ejotygnvfm
我的思路:
首先用创建一个单链表,然后用for循环找寻要找的那个数存入数组中,用while作为外层循环直到找寻到10个数。
#include<bits/stdc++.h>
using namespace std;
typedef struct Lnode
{
int a;
struct Lnode *next;
}Lnode,*LinkList;
void initList(LinkList &L)
{
L=new Lnode;
L->next=NULL;
LinkList temp;
temp=L;
for(int i=49;i<=74;i++)
{
LinkList p=new Lnode;
p->a=i;
p->next=NULL;
temp->next=p;
temp=p;
}
}
void ListDelete(LinkList &L,int n)
{
LinkList p=L;
int j=0;
while((p->next)&&(j<n-1))
{
p=p->next;
++j;
}
LinkList q;
q=p->next;
p->next=q->next;
delete q;
}
void show(int password[])
{
for(int i=0;i<10;i++)
printf("%c",password[i]+48);
}
int main()
{
LinkList L,temp;
initList(L);
int password[10],j=0;
int n;
cin>>n;
while(j<10)
{
temp=L->next;
for(int i=0;i<n;i++)
{
temp=temp->next;
if(i==n-2){
password[j]=temp->a;
ListDelete(L,n-2);
j++;
}
if(temp->next==NULL)
break;
}
for(int i=0;i<n+1;i++)
{
temp=temp->next;
if(i==n-1){
password[j]=temp->a;
ListDelete(L,n-1);
j++;
}
if(temp->next==NULL)
break;
}
}
show(password);
return 0;
}
但是答案始终不对,请问这是为什么啊?