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

admin2021-09-09  62

问题 设有n个人坐一圈并按顺时针方向从l到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 1;
    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=l;i<=100;i++) { flag=0; for(j=0;j
解析 本题是一个实际问题。
    解决该问题的主要思路是:用k来记录每圈中已进行到第几个,如果k==m。则谊人出局。并用数组sequence[]来记录出圈者的编号。再进行下一圈的报数时,如果所到的编号已存在于sequence[]中,则跳过此人。如此下去.直到所有的人都出局.这时sequence[]中记录的就是出圈者的次序。
转载请注明原文地址:https://jikaoti.com/ti/87Y7FFFM
0

最新回复(0)