约瑟夫问题

超过五分钟才写出来,主要是最后怎么实现循环忘了i = (++i)%n。而且和面向对象的思路搞混了

 1 //今天新写的 ,有些垃圾 
 2 #include <iostream>
 3 #include <cstring>
 4 using namespace std;
 5 
 6 int vis[100];
 7 
 8 int main()
 9 {
10     int i,j,k;
11     int m,n,s=0;
12     cin>>m>>n;
13     memset(vis,0,sizeof(vis));
14     
15     int cnt = 0;
16     int temp = 0;
17     int num = 0;
18     for(i=0; i<n; i = (++i)%n)
19     {
20         if(vis[i])
21             continue;
22         cnt++;
23         if(m==cnt)
24         {//在这用一个临时变量保存n的值,每次减一,当n是1的时候输出;不过这时候只能采用第二种输出方式了 
25             vis[i] = 1;
26             cnt = 0;
27         }
28         for(j=0; j<n; j++)
29             if(!vis[j])
30             {
31                 num++;
32                 temp = j;
33             }
34         if(1==num)
35             break;
36         else
37             num=0;
38         if(n==i)
39             i = 0;
40     
41     }
42 
43     for(i=0; i<n; i++)
44         if(!vis[i])
45             cout<<i<<endl;
46     cout<<temp<<endl;
47     while(1);
48     return 0;
49     
50 }
 1 #include <iostream>
 2 #include <cstring>
 3 using namespace std;
 4 
 5 int main()
 6 {
 7     int i,j,k;
 8     int m,n,s=0;
 9     cin>>m>>n;
10     for(i=2; i<=n; i++)
11         s=(s+m)%i;
12     int ans = s;
13     cout<<"胜者编号:"<<ans<<endl;//从0开始  
14     while(1);
15     return 0;
16 }

 

 1 #include<stdio.h>
 2 #include<string.h>
 3 
 4 int vis[310];
 5 
 6 void joseph(int n,int m)
 7 {
 8     int i,j,k;
 9     int cnt=0,count=0;
10     memset(vis,0,sizeof(vis));//0表示未选中
11     for(i=1;count<n-1;i=i%n+1)//循环 n-1次 
12     {
13         if(vis[i]==0)
14         {
15            // vis[i]=1;
16             cnt++;            
17         }
18         if(m==cnt)
19         {
20             vis[i]=1;//出圈 
21             cnt=0;
22             count++;
23         }
24     }
25     for(j=1;j<=n;j++)
26     if(vis[j]==0)
27     {
28         printf("%d\n",j);
29         break;
30     }
31 }   
32 
33 int main()
34 {
35 
36     int m,n;
37     while(scanf("%d%d",&n,&m),n||m)
38         joseph(n,m);
39     return 0;
40 }

 

posted @ 2013-03-21 22:11  加拿大小哥哥  阅读(318)  评论(0)    收藏  举报