一、问题描述
现有n个老鼠围成一圆圈,有一只猫从任意位置开始吃老鼠,每次都隔一个老鼠吃,请给出最后一个老鼠的编号?题目要求是任给老鼠数n,输出猫最后吃的老鼠的编号。
二、代码
#include <iostream.h>
typedef struct _Node
{
int num;
_Node* pNext;
}Node, *pNode;
void InitLink(int n, pNode pHead);
void main()
{
int n;
int k;
int num;
pNode pHead = new Node;
cout<<"输入老鼠的总数:";
cin>>n;
cout<<"输入起始数字:";
cin>>k;
if (k > n)
{
cout<<"请重新输入:";
cin>>k;
}
InitLink(n, pHead);
pNode p=pHead;
pNode q;
for (int i=0; i<(k-2+n)%n; i++)
{
p = p->pNext;
}
while (pHead->pNext != NULL)
{
if (p->pNext == p)
{
cout<<"The result is: "<<p->num<<endl;
return;
}
p = p->pNext;
q = p->pNext;
num = q->num;
p->pNext = q->pNext;
if (pHead->pNext == q)
{
pHead->pNext = p->pNext;
}
delete q;
}
}
void InitLink(int n, pNode pHead)
{
pNode tail = new Node;
tail->num = n;
pNode q = tail;
pNode p = NULL;
for (int i=0; i<n-1; i++)
{
p = new Node;
p->num = n-1-i;
p->pNext = q;
q = p;
}
tail->pNext = p;
pHead->pNext = p;
}
现有n个老鼠围成一圆圈,有一只猫从任意位置开始吃老鼠,每次都隔一个老鼠吃,请给出最后一个老鼠的编号?题目要求是任给老鼠数n,输出猫最后吃的老鼠的编号。
二、代码
#include <iostream.h>
typedef struct _Node
{
int num;
_Node* pNext;
}Node, *pNode;
void InitLink(int n, pNode pHead);
void main()
{
int n;
int k;
int num;
pNode pHead = new Node;
cout<<"输入老鼠的总数:";
cin>>n;
cout<<"输入起始数字:";
cin>>k;
if (k > n)
{
cout<<"请重新输入:";
cin>>k;
}
InitLink(n, pHead);
pNode p=pHead;
pNode q;
for (int i=0; i<(k-2+n)%n; i++)
{
p = p->pNext;
}
while (pHead->pNext != NULL)
{
if (p->pNext == p)
{
cout<<"The result is: "<<p->num<<endl;
return;
}
p = p->pNext;
q = p->pNext;
num = q->num;
p->pNext = q->pNext;
if (pHead->pNext == q)
{
pHead->pNext = p->pNext;
}
delete q;
}
}
void InitLink(int n, pNode pHead)
{
pNode tail = new Node;
tail->num = n;
pNode q = tail;
pNode p = NULL;
for (int i=0; i<n-1; i++)
{
p = new Node;
p->num = n-1-i;
p->pNext = q;
q = p;
}
tail->pNext = p;
pHead->pNext = p;
}