围绕着山顶有10个圆形排列的洞,互利要吃兔子,兔子说:”可以,但必须找到我,我就藏于这10个洞中,你先到1号洞找,第二次隔1个洞(即3号洞)找,第二次隔2个洞(即6号洞)找,以后如此类推,次数不限.”但狐狸从早到晚进进出出了1000次,仍没有找到兔子.问:兔子究竟藏在那个洞里?
#include<iostream.h>
#include<malloc.h>
typedef int elemtype;
typedef struct Lnode
{
elemtype data;
struct Lnode *next;
}Lnode,*Linklist;
Linklist Create(int n)
{
Linklist L;
L=(Linklist)malloc(sizeof(Lnode));
L->next=NULL;//新建单链表的头结点
Linklist p;//新建的单链表的一个结点
Linklist r;//尾指针
r=L;
for(int i=0;i<n;i++)
{
p=(Linklist)malloc(sizeof(Lnode));
p->data=1;
p->next=NULL;
r->next=p;
r=p;
}//尾插法
r->next=L->next;//将最后一个结点连到第一个结点上,构成循环链表
return L;
}
Linklist Find(Linklist L,int m)
{
Linklist q;
q=L;
for(int i=1;i<=m;i++)
{
for(int j=0;j<i;j++)
{
q=q->next;
}//每次进的洞的编号加一
q->data=0;//每次进的洞数值变成0
}
return L;
}
void Print(Linklist L,int n)
{
Linklist q;
q=L->next;
for(int i=0;i<n;i++)
{
cout<<q->data<<endl;
q=q->next;
}
}
void main()
{
cout<<"1表示兔子可能在的洞:"<<endl;
int n,m;
Linklist L;
cout<<"请输入洞的个数:";
cin>>n;
cout<<endl;
cout<<"请输入循环的次数:";
cin>>m;
cout<<endl;
L=Create(n);
L=Find(L,m);
Print(L,n);
}