正文

用数组解决约瑟夫环的几个算法2005-11-15 10:59:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/goal00001111/6986.html

分享到:

算法1: /*求围圈问题的详细算法和程序*//*17人围成一圈,编号为1,2,3,……,17,从1开始报数,报到3的倍数的人离开,一直下去,直到最后剩下1人,求此人的编号  */#include <stdio.h>#include <stdlib.h> int main(void){    int a[17]={0};  int i, count, s;     for (i = 0;i < 17;i++)    {        a[i] = i + 1;    /* 填空数组,编号是下标加一,注意C语言中的数组下标从0开始 */    }      i=0;    s=17;  //用来记录退出圈外的人的数目     count=0;  //计数器     while(s > 1)    {   for(i=0; i<17; i++)    if(a[i] != 0)    {     count++;    //报一次数      if(count == 3)  //每报到一次3,该人退出      {      printf("%d\n",a[i]);    /* 把这个家伙打印出来 */      a[i] = 0;       count = 0;  //计数器归零      s--;     }    }  }    for(i=0; i<17; i++)   if(a[i] != 0)     printf("最后一个是:%d\n",a[i]);       system("pause");     return 0;                 } 算法2: /*求围圈问题的详细算法和程序*//*17人围成一圈,编号为1,2,3,……,17,从1开始报数,报到3的倍数的人离开,一直下去,直到最后剩下1人,求此人的编号  */#include <stdio.h>#include <stdlib.h> int main(void){    int a[17]={0};  int i, j, s;     for (i = 0;i < 17;i++)    {        a[i] = i + 1;    /* 填空数组,编号是下标加一,注意C语言中的数组下标从0开始 */    }      i=0;    s=17;    j=0;    while(s > 1)    {   if(a[i%17] != 0)   {    if((i+1-j)%3 == 0)    {       printf("%d\n",a[i%17]);    /* 把这个家伙打印出来 */     a[i%17] = 0;      s--;    }   }   else    j++;      i++;  }    for(i=0; i<17; i++)   if(a[i] != 0)     printf("最后一个是:%d\n",a[i]);  system("pause");     return 0;                 }

阅读(6570) | 评论(3)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

loading...
您需要登录后才能评论,请 登录 或者 注册