永发信息网

静态数组问题

答案:1  悬赏:40  手机版
解决时间 2021-04-21 08:10

已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。

如何编写算法,最近事情太多了,哪位同志帮帮忙
最佳答案

用链表处理:
#include<stdio.h>
#include<malloc.h>

struct num{
int i;
struct num *next;
};

struct num *creat(int n){
struct num* p1,*p2,*head;
int m=2;
head=p1=p2=(struct num*)malloc(sizeof(struct num));
p1=(struct num*)malloc(sizeof(struct num));
p2->next=p1;
p2=p1;
(p1->i)=m;
m++;
}
p2->next=head;
return head;
}

int main(){
int n,m=2;
struct num *p;
printf("please enter the total num:");
scanf("%d",&n);
p=creat(n);
while(p->next!=p){
if(m!=3){
p=p->next;
m++;
}
else{
(p->next)=(p->next)->next;
m=1;
}
}
printf("%d",p->i);
return 0;
}



用指针处理:
#include<stdio.h>

int main(){
int num[50],*p,n,m,i=1,k=0;
printf("please enter the num:");
scanf("%d",&n);
for(m=1;m<=n;m++)
num[m]=m;
p=&num[1];
m=0;
while(1){
if(m>=n)
m=0;
if(*(p+m)==0){
m++;
continue;
}
if(i==3){
*(p+m)=0;
i=1;
k++;
m++;
}
else{
m++;
i++;
}
if(k==n-1)
break;
}
for(;*p==0;p++)
;
printf("%d\n",*p);
return 0;
}



一个巧妙的算法:
#include <stdio.h>
const int M = 3;
int main()
{
int i,n, s = 0;
scanf("%d", &n);
for (i=2;i<=n;++i)
s = (s+M)%i;
printf("%d\n", s+1);
return 0;
}

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
大话西游3官方网站
怎样可以高兴起来?
某化工厂有三个车间,他们排放的污水中分别有
中海国建建筑工程有限公司贵州分公司我想知道
爱宠国里,有免费送GB德么?
QQ会员专属QQ堂宠物,几点能领到?
这道题怎么做?【某二次函数对称轴为x=4,与x
什么养的女人最可爱
急!!请朋友们帮我想想以长江大学见义勇为写
天官赐福怎么去啊,有知道地址的么
怎么样才能走出被朋友背叛的阴影
怎么找股票支撑位.下跌时候
十字绣批发
汽车冰雪路面防滑技术研究的论文怎么做?
梦幻西游,合任务宝宝该怎么合呢?六十九的宝
推荐资讯
为什么不能下载东西了
我`真`的`搞`不`懂`为`什`么`她`旁`边`的`朋`
怎么查询自己做的事有没有违法中国法律。
关于七夕的唯美情话,七夕最感动情话
开通黄钻有哪些特权?
有的时候为什么心会很痛
仙四的剧情
动态好友什么意思,怎么加动态好友
医学上什么是物理方法?
海尔专卖店水茜店我想知道这个在什么地方
第一个我的英文怎么写,第一名的英文怎么写
光风霁月亭这个地址在什么地方,我要处理点事
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?