求C语言大家给解决一下编程问题。 编写程序,17个人围成圈,编号1到17,从1号开始报数,报数3的倍

发布网友 发布时间:2022-04-26 23:08

我来回答

1个回答

热心网友 时间:2023-11-11 15:17

循环链表。
最后是11号留下来了。
请叫我雷锋。
#include<stdio.h>
#include<stdlib.h>
typedef struct Node
{
int no;
struct Node *next;
}Node;

Node * CreateLoop(int number) //建立循环链表
{
Node *head,*node;
int i;
if(number==0)return NULL;

head=(Node *)malloc(sizeof(Node));
head->no=1;
node=head;
for(i=1;i<number;++i)
{
node->next=(Node *)malloc(sizeof(Node));
node->next->no=i+1;
node=node->next;
}
node->next=head;
return head;
}

void _Do(Node *head) //开始报数
{
Node *node=head->next,*pre=head,*temp;
int i;
for(i=2;node->next!=node;++i)
{
if(i%3==0){
printf("The NO.%d have been deleted\n",node->no);
pre->next=node->next;
temp=node;
node=node->next;
free(temp);
}
else {
pre=node;
node=node->next;
}
}
printf("The Last is NO.%d\n",node->no);

}

int main()
{
_Do(CreateLoop(10));
return 0;
}追问你这个看不懂呀,不需要用链表,只需用指针!谢谢

追答那这个看的懂吧。
这是用指针数组。

#include
#include

int main()
{
int i,j=0,count=17;
int *a[17];
for(i=1;i<=17;++i){
a[i-1]=(int*)malloc(sizeof(int));
*a[i-1]=i;
}
i=1;
j=0;
while(1){
if(a[j]!=NULL){
if(i%3==0){
free(a[j]);
a[j]=NULL;
count--;
++j;
++i;
}
else {
++j;
++i;
}
}
else ++j;
if(j==17)j=0;
if(count==1)break;
}

for(i=0;i<17;++i)
if(a[i]!=NULL)printf("The Last is %d\n",*a[i]);
return 0;
}

热心网友 时间:2023-11-11 15:17

循环链表。
最后是11号留下来了。
请叫我雷锋。
#include<stdio.h>
#include<stdlib.h>
typedef struct Node
{
int no;
struct Node *next;
}Node;

Node * CreateLoop(int number) //建立循环链表
{
Node *head,*node;
int i;
if(number==0)return NULL;

head=(Node *)malloc(sizeof(Node));
head->no=1;
node=head;
for(i=1;i<number;++i)
{
node->next=(Node *)malloc(sizeof(Node));
node->next->no=i+1;
node=node->next;
}
node->next=head;
return head;
}

void _Do(Node *head) //开始报数
{
Node *node=head->next,*pre=head,*temp;
int i;
for(i=2;node->next!=node;++i)
{
if(i%3==0){
printf("The NO.%d have been deleted\n",node->no);
pre->next=node->next;
temp=node;
node=node->next;
free(temp);
}
else {
pre=node;
node=node->next;
}
}
printf("The Last is NO.%d\n",node->no);

}

int main()
{
_Do(CreateLoop(10));
return 0;
}追问你这个看不懂呀,不需要用链表,只需用指针!谢谢

追答那这个看的懂吧。
这是用指针数组。

#include
#include

int main()
{
int i,j=0,count=17;
int *a[17];
for(i=1;i<=17;++i){
a[i-1]=(int*)malloc(sizeof(int));
*a[i-1]=i;
}
i=1;
j=0;
while(1){
if(a[j]!=NULL){
if(i%3==0){
free(a[j]);
a[j]=NULL;
count--;
++j;
++i;
}
else {
++j;
++i;
}
}
else ++j;
if(j==17)j=0;
if(count==1)break;
}

for(i=0;i<17;++i)
if(a[i]!=NULL)printf("The Last is %d\n",*a[i]);
return 0;
}

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com