用指针方法处理

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

偶不知道怎么做了,望各位赐教
...全文
100 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);
}

下载代码方式:https://pan.quark.cn/s/dd3561eca308 在软件开发领域,面向对象编程(OOP)是一种普遍采纳的结构化方法,它使得开发者能够借助模拟现实环境中的实体和关系来构建软件系统。在本案例中,我们观察到的是一个关于借助抽象类来执行不同几何图形面积求解的实践应用。现在,让我们详细分析这一议题。 标题 "应用抽象类计算面积" 清晰地表明我们将要讨论一个抽象类,此类设定了一个用于测量图形面积的标准函数,但并未提供实际的执行过程。抽象类在诸如C#或Java等编程语言中通常借助`abstract`修饰符进行声明,它们无法直接创建对象实例,仅能作为其他类的基础模板。 描述部分提及的"图形界面应用"暗示这是一个基于视觉用户界面(GUI)的系统,可能运用了.NET Framework的Windows Forms或WPF技术,或者是Java平台的Swing或JavaFX框架。在这样环境下,用户能够通过视觉元素与这些几何体进行互动,例如输入相关尺寸并观看到计算得出的面积值。 抽象类“几何体”内嵌了“计算面积”这一抽象函数。在代码层面,这可以被表述为: ```csharp public abstract class GeometricShape { public abstract double CalculateArea(); } ``` 随后,有三个派生类:圆(Circle)、矩形(Rectangle)和三角形(Triangle),它们各自提供了这个抽象函数的具体实现。比如,圆的面积是通过π乘以半径的平方得到的,矩形的面积是长和宽的乘积,而三角形的面积可能是底乘以高再除以2的结果。这些类将提供具体实现来计算它们各自的面积: ```csharp p...

70,039

社区成员

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

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