首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

帮忙解释解释,不知道怎么回事,帮小弟我一步步解释解释

2012-05-06 
帮忙解释解释,不知道咋回事,帮我一步步解释解释。例:有N个人围成一圈,顺序排号,从第一个人开始报数(从一到

帮忙解释解释,不知道咋回事,帮我一步步解释解释。
例:有N个人围成一圈,顺序排号,从第一个人开始报数(从一到三报数),凡报到三的人退出圈子,问最后留下的是原来第几号的那位?

main()
{int i,k,m,n,num[50],*p;
 scanf("%d",&n);
 p=num;
 for(i=0;i<n;i++)
*(p+i)=i+1;
 i=0;k=0;m=0;
 while(m<n-1)
{if(*(p+i)!=0) k++;
if(k==3)
{*(p+i)=0;
k=0;
m++;}
i++;
if(i==n) i=0;
}
 while(*p==0) p++;
 printf("%d\n",*p);
}


[解决办法]

C/C++ code
main(){int i,k,m,n,num[50],*p; scanf("%d",&n);//N个人 p=num; for(i=0;i<n;i++)*(p+i)=i+1; i=0;k=0;m=0; while(m<n-1)//当找到第n-1个人时,循环停止,剩下一个就是最后出圈的{ if(*(p+i)!=0) k++;//k表示计数if(k==3)//数到3,找到一个人{*(p+i)=0;//把这个人所在的位置置零作为已经出圈的标记k=0;//k从0开始计数m++; }//m表示已经找到的人数i++;if(i==n) i=0;//如果i到达数组的尾部,则从头开始} while(*p==0) p++;//找到数组中值不为0,即没有出圈的那个人 printf("%d\n",*p);//输出}
[解决办法]
自己写的用循环单链表实现,供参考!
C/C++ code
#include <stdio.h>#include <malloc.h>typedef struct Node{    int no;    struct Node *next;}Node,*pNode;int main(){    int counter, num;    printf("围圈的人数:");    scanf("%d", &counter);    printf("要数到的数目(>2):");    scanf("%d", &num);    //围圈    int i;    pNode head = NULL, q = head, p;    for (i = 0; i < counter; i++)    {        p = (pNode)malloc(sizeof(Node));        p->no = i+1;        if (i == 0)        {            head = p;            p->next = head;                    }        else        {            p->next = q->next;            q->next = p;        }        q = p;    }    //报数处理,注意p,q,counter用来存新的数据喽    q = head;    counter = 1;    while(1)    {        if (counter == num)        {//这里的删除方式,是把一个结点值赋给本节点,然后删除后面的结点,这样省去对前一个结点指针的记录            p = q->next;            if (p == q)//只剩一个结点            {                printf("最后一个%d\n", p->no);                break;            }            else            {                //printf("%d\n",q->no);                q->no = q->next->no;                q->next = q->next->next;                free(p);            }            counter = 1;        }        counter++;        q = q->next;    }    free(p);    return 0;} 

热点排行