C语言请教--编程
- 提问者网友:鼻尖触碰
- 2021-06-03 19:46
- 五星知识达人网友:忘川信使
- 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; }