刚开始学习数据结构,老师布置了一道题,自己用代码实现了。第一次用博客,排版这些也不怎么会。希望能和数据结构新手一起学习,也希望大神指点指点。
题目如下
围绕着山顶有10 个圆形排列的洞。狐狸要吃兔子, 兔子回答说: “可
以, 但必须找得到我, 我就藏在这10 个洞中。你先到1 号洞找, 第二
次隔1 个洞( 即3 号洞) 找, 第三次隔2 个洞( 即6 号洞) 找, 以后
如此类推, 次数不限。 ” 狐狸从早到晚进进出出了1000 次, 一直没有
找到兔子。问兔子究竟藏在哪个洞里?
#include<stdio.h>
#include<malloc.h>
struct tz
{
int number;//洞的编号
int time; //是否进入洞,如果进入结果为1,不进入结果为0
struct tz *next;
};
void main()
{
struct tz *head, *p, *q,*temp; //定义临时指针
int k = 0;
head = NULL;
q = NULL;//初始化
for (int i = 0; i < 10; i++)//创建链表
{
p = (struct tz*)malloc(sizeof(struct tz));//分配空间
p->number = i + 1;
p->time = 0;
p->next = NULL;
if (head==NULL)
{
head = p;
q = p;
}
else
{
q->next = p;
q = p;
}
}
temp = (tz*)malloc(sizeof(tz));
temp = head;
for (int i = 1; i <=1000; i++)
{
k = (k + i) % 10;// k为进入编号为多少的洞
if (k == 0)// 当k=0时 k=10
{
k = 10;
}
for (int j = 1; j < k; j++)//进洞
{
temp = temp->next;
}
temp->time = 1;
temp = head;
}
for (int i = 0; i < 10&&temp!=NULL; i++)//遍历输出 time为0的洞编号
{
if (temp->time ==0)
printf("%d\n", temp->number);
temp = temp->next;
}
}