用指针方法处理

6233lele 2005-04-13 08:41:04
有n个人围成一圈,顺序牌号.从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位.

偶不知道怎么做了,望各位赐教
...全文
99 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
dongpy 2005-04-13
  • 打赏
  • 举报
回复
//帖一个链表实现的。

#define M 3
typedef struct queue
{
int Index;
queue *next;
}Queue,*Pqueue;

Pqueue CreateQueue(int n)
{
Pqueue pQueue,pQueue_ret,pPrev;
for(int i=1;i<=n;i++)
{
pQueue=(Pqueue)malloc(sizeof(Queue));
pQueue->Index=i;
if(i == 1) //链表头
{
pQueue_ret = pQueue ;
}
else
{
pPrev-> next = pQueue;
}
pPrev = pQueue ;
}
pPrev->next=pQueue_ret;
return pQueue_ret;
}

Pqueue DequeueOne(Pqueue pQueue,int m)
{
Pqueue pPrev;
for(int i=1;i<m;i++)
{
pPrev=pQueue;
pQueue=pQueue->next;
}
pPrev->next= pQueue->next;
printf("%d->",pQueue->Index);
free(pQueue);
return pPrev->next;
}

void DequeueAll(Pqueue pQueue,int m)
{
while (pQueue!=pQueue->next)
{
pQueue=DequeueOne(pQueue,m);
}
printf("%d\n",pQueue->Index);
}

int main()
{
int n;
Pqueue pQueue;
printf("输入人数n:");
scanf("%d",&n);
pQueue=CreateQueue(n);
printf("出列顺序:\n");
DequeueAll(pQueue,M);
return 0;
}
江海门户 2005-04-13
  • 打赏
  • 举报
回复
或者用递归也可以考虑
useresu 2005-04-13
  • 打赏
  • 举报
回复
大概想了一下,没想到被这么多人抢了 ,而且偶的答案似乎太那个了,郁闷哪
useresu 2005-04-13
  • 打赏
  • 举报
回复
很多种方法的,可以用链表实现,先用生成一个n长的链表,
tydef NCODE struct
{
int i;//用于记录人的编号
ncode * pcode;
}ncode
然后把3的倍数的从链表中删除,钱能那本《C++程序设计教程》中有详细的例子。
晨星 2005-04-13
  • 打赏
  • 举报
回复
使用循环链表最直接。
pcboyxhy 2005-04-13
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char *argv[])
{
int m, n, step=0, index=0, cir=0, t;
scanf("%d%d", &m, &n);
char *out = (char*)malloc(m);
if(!out) return -1;
memset(out, 0, m);
while(1)
{
if(step==m) break;
while(cir<n)
{
if(!out[index]) ++cir;
index=(index+1)%m;
}
cir=0; ++step; out[(index+m-1)%m]=1;
printf("\nNo.%d out.", !index?m:index);
}
free(out);
system("PAUSE");
return 0;
}
llf_hust 2005-04-13
  • 打赏
  • 举报
回复
#include "stdio.h"
#include "stdlib.h"
typedef struct _list
{
int val;
struct _list* next;
}List,* pList;


void main()
{
int n,i;
pList head,temp,cur,pre,flw;

scanf("%d",&n);

head =(pList) malloc(sizeof(List));
head->val = 1;
cur = head;

for(i = 2 ; i <= n ; i++)
{
temp = (pList) malloc(sizeof(List));
temp->val = i;
cur->next = temp;
cur = temp;
}

cur->next = head;
pre = cur;
cur = head;

i = 1;
while(cur->next != cur)
{
if(i%3==0)
{
pre ->next = cur->next;
free(cur);
cur = pre->next;
}
else
{
pre =cur;
cur= cur->next;
}

i++;

}

printf("%d\n",cur->val);
free(cur);
}

内容概要:本文围绕“基于超局部模型与自抗扰ESO观测器的无模型预测电流控制改进策略”展开研究,提出一种结合超局部模型(ULM)与扩张状态观测器(ESO)的无模型预测电流控制(MFPCC)改进方法,旨在提升永磁同步电机(PMSM)电流环的动态响应性能与抗干扰能力。该策略利用超局部模型对系统行为进行局部逼近,避免依赖精确数学模型,同时引入自抗扰控制中的ESO实时观测并补偿系统内外部扰动,有效抑制参数摄动、负载变化及模型不确定性带来的影响。研究通过Simulink搭建完整的控制系统仿真模型,对传统MFPCC与所提改进策略进行对比分析,验证了新方法在电流跟踪精度、响应速度和鲁棒性方面的优越性。; 适合人群:具备电机控制、现代控制理论及Simulink仿真基础的电气工程、自动化及相关专业的研究生、科研人员及工程技术人员。; 使用场景及目标:①用于高性能电机驱动系统中电流环控制器的设计与优化;②为无模型控制与自抗扰控制的融合应用提供技术参考;③支撑相关课题的仿真验证、论文复现与创新方法研究。; 阅读建议:建议读者结合Simulink仿真模型深入理解控制结构与参数整定过程,重点关注ESO的观测性能与扰动补偿机制,并可通过改变负载条件、参数偏差等工况进行鲁棒性测试,进一步掌握该改进策略的核心优势与适用边界。

70,038

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧