解题思路:
由下面的图可以看出当p往下走时count必须从一开始否则会超前一位
注意事项:
参考代码:
#include <stdio.h>
#include <stdlib.h>
typedef struct Link_list
{
int data;
struct Link_list* next ;
}linklist;
//生成节点并将这n个数编号
linklist * find(linklist *head,int n)
{
struct Link_list *p,*q;
p=head =(linklist *)malloc(sizeof(linklist ));
for (int i=1;i<=n;i++)
{
q=(linklist *)malloc(sizeof (linklist ));//给辅助变量分配空间
q->data=i; //编号
p->next =q ; //将这个新生成的节点连接起来
p=q;
}
p->next =head->next; //让为节点指向头结点的下一个
return head; //返回头结点 也相当于返回这个链表
}
//找到留下来的那位
void Choose (linklist *head,int n)
{
int count = 1;
linklist*q,*p=(linklist*)malloc (sizeof(linklist));
p=head;
while (n)
{
if (count !=3)//如果count!=3就往下走
{
p=p->next;//往下走
count ++;
}
else
{
q=(linklist*)malloc(sizeof(linklist));
q=p->next;//用一个辅助变量来存储p的下一个避免找不到下一个节点
count =1;
p->next=q->next;//指向下一个的下一个
if(n ==1)//当只剩下最后一个元素时输出它的数据域
printf ("%d",p->data);
n --;
free(q);
}
}
}
int main()
{
struct Link_list *head=NULL;
int n;
printf ("请输入有几个人:\n");
scanf ("%d",&n);
head=find(head,n);
Choose(head,n);
return 0;
}
0.0分
0 人评分
C语言程序设计教程(第三版)课后习题5.7 (C++代码)浏览:846 |
C语言程序设计教程(第三版)课后习题8.6 (C语言代码)浏览:530 |
【蟠桃记】 (C语言代码)浏览:648 |
WU-蓝桥杯算法提高VIP-Quadratic Equation (C++代码)浏览:1742 |
C语言程序设计教程(第三版)课后习题11.8 (C语言代码)浏览:869 |
2004年秋浙江省计算机等级考试二级C 编程题(1) (C语言代码)浏览:500 |
K-进制数 (C语言描述,蓝桥杯)浏览:925 |
P1000 (C语言代码)浏览:868 |
Minesweeper (C语言描述,蓝桥杯)浏览:1122 |
敲七 (C++代码)浏览:1050 |