狐狸逮兔子

围绕着山顶有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);
}

猜你喜欢

转载自blog.csdn.net/qq_41596915/article/details/82856243