紧急 求一份C语言程序题目:20个人坐在一圈,报到3或3的倍数的人出席,问最后剩下的人是谁?c语言编程

20个人坐在一圈,报到3或3的倍数的人出席,问最后剩下的人是谁?... 20个人坐在一圈,报到3或3的倍数的人出席,问最后剩下的人是谁? 展开
 我来答
匿名用户
2013-05-08
展开全部
#include <stdio.h>

int main()
{
int i, k, n, t;
t = 20;
n = 3;
for(i = 1; i <= t; ++i)
k = (k + n) % i;
printf("最后剩下的是第 %d 个人\n", k+1);
return 0;
}
匿名用户
2013-05-08
展开全部
用C++写的
用数组解决
#include <iostream.h>
void display(int[],int n,int m);
void main()
{
int n,m;
int a[20];
cout<<"请输入人数:";
cin>>n;
cout<<"请输入间隔数:";
cin>>m;
for(int i=1;i<=n;i++)
{
a[i-1]=i;
}
display(a,n,m);
}
void display(int a[],int n,int m)// 约瑟夫环算法
{
int i,k,c1,c2,c3;
k=-1;
for(int p=1;p<=n;p++)
{
i=0;
c1=k+n+m;
k=c1%n;
while(i!=m)// 判断数组元素是否输出
{
i++;
c2=(k+i+n-m)%n;
if (a[c2]==0)
{
k++;i--;
}
}
c3=k%n;
cout<<a[c3]<<" ";
a[c3]=0;//标志已输出数组元素
}
cout<<endl;
}

用链表解决
#include <iostream.h>
struct Node
{
int data;
struct Node *next;
};
Node *createlist(int);
void displist(Node *,int,int);
void main()
{
Node *head;
int n,i,m;
cout<<"请输入人数:";
cin>>n;
cout<<"请输入间隔数:";
cin>>m;
head=createlist(n);
cout<<"结果:";
displist(head,n,m);
}
Node *createlist(int n)//建立循环链表
{
Node *head,*r,*s;
for(int i=0;i<n;i++)
{
s=(Node*)new(Node);
s->data=i+1;
s->next=NULL;
if (i==0)
{
head=s; r=s;
}
else
{
r->next=s; r=s;
if (i==n-1)
{
r->next=head;
}
}
}
return head;
}
void displist(Node *head,int n,int m )//约瑟夫环算法
{
Node *p;
for(int k=0;k<n;k++)
{

if(m>1)
{
p=head->next;
for (int i=1;i<m-1;i++)
{
head=head->next;
p=p->next;
}
cout<<p->data<<" ";
head->next=p->next;
head=head->next;
delete p;
}
else if(m=1)
{
p=head;
cout<<p->data<<" ";
head=p->next;
delete p;
}
}
cout<<endl;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式