永发信息网

C语言请教--编程

答案:2  悬赏:0  手机版
解决时间 2021-06-04 16:34
  • 提问者网友:鼻尖触碰
  • 2021-06-03 19:46
用C语言指针编写:N个人排成一圈,从第一人开始数,数到3的人出列,然后又从后面开始数,直到最后一个人出列,求出最后出列人的序号,谢谢!
最佳答案
  • 五星知识达人网友:忘川信使
  • 2021-06-03 21:24

我这里帮你拓展一下,一共有m只人围成一圈,开始数数,数到n时退出圈,剩下的重新开始数,知道最后一个人,求他的序号.(用C语言编写)(如果你想用C++的语言编写,可以参照问问团队武工大编程为你提供的答案)


(这个题目同时可以采用链表的方式编写,是一个很好的题目,希望多多琢磨)


#i nclude "stdio.h"
void main()
{
int a[500],i,j,k=0,m,n;
do
{
printf("input total mokey,m(<500):");
scanf("%d",&m);
}while(m<0 || m>500);
do
{
printf("input n,(n<m):");
scanf("%d",&n);
}while(n<0 || n>m);
for(i=0;i<m;i++)
a[i]=i;
j=m;
i=0;
do
{
while(k<n)
{
if(a[i]!=-1)
{
if(k==n-1)
{
a[i]=-1;
printf("%d ",i);
}
k++;
}
i++;
if(i==m)
i=0;
}
j--;
k=0;
}while(j>1);
for(i=0;i<m;i++)
if(a[i]!=-1)
printf("\nking=%d",i);
}

全部回答
  • 1楼网友:不甚了了
  • 2021-06-03 22:13

以前刚好有一个程序,发给你,希望对你有帮助。

#include<iostream> using namespace std; //本程序以从1开始数,数到3离队为例,其它情况只用少加修改 void make(int *base,int n,int pos,int c) { int j=0; cout<<"NO. "<<++c<<" 第"<<pos+1<<"位出列"<<endl;//输出 base[pos]=0;//踢掉 if(c==n)return; //出口 while(j-3) if(base[pos=(pos+1)%n]) j++;//递归点 ,每次数到几这个3就改到几 make(base,n,pos,c);//递归 } int main() { int n,c=0,pos=2;//从N开始数,则把pos改为N-1就行了. cout<<"请输入总人数"<<endl; cin>>n; // cout<<"请输入从第几个位置开始查询: "<<"\n"; // cin>>pos; // pos-=1; int *base=new int[n]; for(int i=0;i<n;i++) base[i]=1; make(base,n,pos,c); delete[]base; system("PAUSE"); return 0; }

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯