出圈问题的代码

本文详细介绍了如何使用循环链表解决出圈问题,即在一个由N个人组成的环形队伍中,通过报数的方式让指定数字的人离开队伍,直至只剩一人,最后输出该人所在的数字。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前几天没事,学习循环链表时候写的关于出圈问题的代码~~~~

所谓出圈问题是指N个人排成一圈,然后报数,谁报到指定的数字,然后“出圈”,也就是从链表里删除,然后再从一开始报数,知道剩下最后一个为止,然后输出这个数。

#include<stdio.h>
#include<stdlib.h>

typedef struct Node{
 int value;
 struct Node *next;
}NODE;
void initcir(NODE *header);
void outputscir(NODE *header);
void calculatecir(NODE *header,int value);
int main()
{
 NODE *header=NULL;
 header=(NODE*)malloc(sizeof(NODE));
 header->value=0;
 header->next=NULL;
 int i=1;
 initcir(header);
  //  outputscir(header);
 calculatecir(header,3);
 freecir(&header);
 return 1;
}

void initcir(NODE *header)
{
 NODE * header_point=header;
 int i;
    for(i=1;i<11;i++){
  NODE *node=(NODE*)malloc(sizeof(NODE));
  node->value=i;
  node->next=NULL;
  header_point->next=node;
  header_point=header_point->next;
 }
 header_point->next=header; 
}

void freecir(NODE **header)
{
 NODE * header_point=*header;
 while(header_point->next !=)
}

void outputscir(NODE *header)
{
 NODE * temp_point=header->next;
 printf("outputs begin:/n");
 while(temp_point != header){
  printf("*******value:%d/n",temp_point->value);    
  temp_point=temp_point->next;
 }
 printf("outputs end/n");
}

void calculatecir(NODE *header,int value)
{
 printf("*******value:%d/n",value);
 NODE * temp_point=header;
 NODE * node=NULL; 
 int i=1;
 while(header->next->next!=header){
  if(temp_point==header){
   node=temp_point;
   temp_point=temp_point->next; 
  }
  if(i<value){
   node=temp_point;   
   temp_point=temp_point->next; 
   i++;  
  }
  else{
    node->next=temp_point->next;
    temp_point->next=NULL;
    free(temp_point);
    temp_point=node->next; 
    i=1; 
   }
 }
 printf(" the lastone :%d/n",header->next->value);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值