设有n个人坐一圈并按顺时针方向从1到n编号,从第s个人开始进行1到m的报数,若报到第m个人,则此人出圈,再从他的下一个人重新开始从1到m报数,如此进行下去,直到所有的人都出圈为止。请编制函数Josegh(),给出这n个人的顺序表。函数WriteData()

admin2011-06-14  26

问题 设有n个人坐一圈并按顺时针方向从1到n编号,从第s个人开始进行1到m的报数,若报到第m个人,则此人出圈,再从他的下一个人重新开始从1到m报数,如此进行下去,直到所有的人都出圈为止。请编制函数Josegh(),给出这n个人的顺序表。函数WriteData()负责把编号按照出圈顺序输出到文件OUT.DAT中。
设n=100,s=1,m=10进行编程。
注意;部分源程序已给出。
请勿改动主函数main()和写函数WriteData()的内容。
试题程序;
#include
#define N 100
#define S 1
#define M 10
int sequence[N]={0},n,s,m;
void WriteData(void);
void Josegh(void)
{
}
void main()
{
  m=M;n=N;s=S;
  Josegh();
  WriteData();
}
void WriteData(void)
{
  int i;
  FILE*fp;
  fp=fopen("OUT.DAT","w");
  for(i=0;i  {
    printf("%4d",sequence);
    fprintf(fp,"%4d",sequence);
    if((i+1)%10==0)
    {
    printf("\n");
    fprintf(fp,"\n");  
    }
    }
    fclose(fp);
}

选项

答案  void Josegh(void) { int i,j,k=0,flag,out_num=0; //k用来标记每圈中已进行到第几个 while(1) { for(i=1;i<=100;i++) { flag=0; for(j=0;j
解析 本题是一个实际问题。解决该问题的主要思路是;用k来记录每圈中已进行到第几个,如果k==m,则该同学出局。并用数组sequence[]来记录出圈者的编号。在进行下一圈的报数时,如果所到的编号已存在于sequence[]中,则跳过此人。如此下去,直到所有的人都出局,这时sequence[]中记录的就是出圈者的次序。
转载请注明原文地址:https://jikaoti.com/ti/mVU7FFFM
0

最新回复(0)