zoukankan      html  css  js  c++  java
  • 约瑟夫问题

    超过五分钟才写出来,主要是最后怎么实现循环忘了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 }
  • 相关阅读:
    变量和简单的数据类型
    homebrew 取消每次安装检查更新
    小程序设置全屏
    linux 文本换行
    删除mac上的缓存文件
    laravel admin 中监听后台管理数据变化
    laravel快速添加观察者
    软件安装
    跨域数据
    将spring mvc 发布到服务器端
  • 原文地址:https://www.cnblogs.com/hxsyl/p/2974431.html
Copyright © 2011-2022 走看看