日 历
 
<<  < 2008 - 11 >  >>
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
 
 
 
 
 
静下心来,做点事情!
童言无忌,各位见笑!
 

本站logo

学前班


本站永久域名:

http://BugEyes.blog.edu.cn

 
 
登 陆
 
 
载入中

 
 
我 的 分 类
 
 

载入中

搜索一下

 
 
最 新 日 志
 
 

载入中

 

 
 
朋友的评论
 
 
载入中
 
 
朋友的留言
 
 
载入中
 
 
BLOG 信 息
 
 

创建日期:2005年5月2日

载入中

 

 
 
友 情 连 接
以下连接按先后顺序进行排名
 
   
 


 

朋友们如果转载或引用本站的内容,请尊重作者的劳动,注意保留完整,并注明文章原始url。谢谢!_____________BugEyes

尽管代码丑陋,思想低级,但非注明出处者均为原创文章。

约瑟夫环问题求解算法C语言源代码[原创] [ BugEyes 发表于 2005-11-18 14:49:00 ]

     约瑟夫算法:n个人围成一圈,每人有一个各不相同的编号,选择一个人作为起点,然后顺时针从1到k数数,每数到k的人退出圈子,圈子缩小,然后从下一个人继续从1到k数数,重复上面过程。求最后推出圈子的那个人原来的编号。

     思路:按照上面的算法让人退出圈子,直到有n-1个人推出圈子,然后得到最后一个退出圈子的人的编号。

     程序:坐成一圈的人的编号不需要按序排列

#define N 100
int yuesefu1(int data[],int sum,int k)
{
   int i=0,j=0,count=0;
   while(count<sum-1)
   {
     if(data[i]!=0)/*当前人在圈子里*/
         j++;
     if(j==k)/*若该人应该退出圈子*/
     {
         data[i]=0;/*0表示不在圈子里*/
         count++;/*退出的人数加1*/
         j=0;/*重新数数*/
     }
     i++;/*判断下一个人*/
     if(i==sum)/*围成一圈*/
         i=0;
   }
   for(i=0;i<sum;i++)
      if(data[i]!=0)
          return data[i];/*返回最后一个人的编号*/
}

void main()
{
   int data[N];
   int i,j,total,k;
   printf("\nPlease input the number of every people.\n");
   for(i=0;i<N;)/*为圈子里的人安排编号*/
   {
      int input;
      scanf("%d",&input);
      if(input==0)
           break;/*0表示输入结束*/
      for(j=0;j<i;j++)/*检查编号是否有重复*/
          if(data[j]==input)
              break;
      if(j>=i&&input>0)/*无重复,记录编号,继续输入*/
      {
          data[i]=input;
          i++;
      }
      else
           printf("\nData error.Re-input:");
   }
   total=i;
   printf("\nYou have input:\n");
   for(i=0;i<total;i++)
   {
     if(i%10==0)
            printf("\n");
     printf("%4d",data[i]);
   }
   printf("\nPlease input a number to count:");
   scanf("%d",&k);
   printf("\nThe last one's number is %d",yuesefu1(data,total,k));
}

 

Re:约瑟夫环问题求解算法C语言源代码[原创] [ Reuben(游客)发表评论于2007-4-12 17:11:00 ]
Reuben(游客)Thank you very much!
个人主页 | 引用 | 返回 | 删除 | 回复
 
Re:约瑟夫环问题求解算法C语言源代码[原创] [ FUCK(游客)发表评论于2007-11-1 11:02:00 ]
FUCK(游客)COOL!!!
个人主页 | 引用 | 返回 | 删除 | 回复
 
约瑟夫环问题C++版 [ 吕起民(游客)发表评论于2008-5-20 17:44:00 ]
吕起民(游客)enum{N = 10,M=7};
int main(int argc, char* argv[])
{
char array[N] = {1,2,3,4,5,6,7,8,9,10};
int nCount = N;
int i = 0;
while(nCount > 1)
{
i = (i+M-1)%nCount;
printf("%d\n",array[i]);
memcpy(array+i,array+i+1,nCount-i);
nCount --;
// array[nCount] = 0;//可省此行
}
printf("约瑟夫=%d\n",array[0]);
return array[0];
}
 
发表评论:
载入中

版权归 学前班校长所有
http:// bugeyes.blog.edu.cn
 
 
Powered by Oblog.