圆桌问题

原创 2006年06月06日 21:31:00
/*圆桌问题

编号为1——n的n个人围坐在圆桌前,从某个人开始报数,以1开始,报数为常数m的人离开桌子。
下个人接着从1开始报数,依次重复进行下去,直到全部人都离开桌子。
要求输出各位离开的编号次序。

*/

The most recent one on 2.May.2008, Does it make sense?
=================

#include <stdio.h>
#include <stdlib.h>


#define LENGTH 10
#define ANNOUNCER 4

int main(int argc, char **argv){
    int array[LENGTH];
    int len  = LENGTH;
    int i, j, left;
    for(i = 0; i< LENGTH; i++){//marks the position that is available
        array[i] = 1;
    }
   
    j = 0;

        for(i = 0; i< LENGTH; i = (i+1)%10){//loop until len == 1

            if(array[i] != 0){
                j++;//counter
            }
            if(j==ANNOUNCER){//reached 4, out
                array[i] = 0;//unmark
                len--;
                j = 0;
            }
            if(len == 1){
                break;
            }
        }
       
    for(i = 0;i<10; i++){
        if(array[i] != 0){
             printf("left: %d/n",i);
         }
    }   
   
}

the original post
===============

#include<stdio.h>

void main()
{
    int r[11]={1,2,3,4,5,6,7,8,9,10,11};/*11个人*/
    int i;
    int n=0; /*循环计数*/
    int m=0; /*统计出局人数*/
    int final; /*记录最后一个不为0的数的下标,即为最后剩下人的标号*/
    int final_pre;
    bs:;
    for(i=0;i<11;i++)
      if(r[i]!=0)
       {
          n++;
          final=i;
          if(n==4)/*报数到4的出局*/
          { r[i]=0;
            n=0;
            m++;
            final=final_pre;
          }
          final_pre=final;
       }
    if(m!=10)
        goto bs;

    printf("%d/n",r[final]);/*the only man in the world:*/
    getchar();
}
   

/*
感言:以前也作过这个题。
以前的代码:
#include
  void main()
  { static int a[9]={1,1,1,1,1,1,1,1,2};
   int i,m,n;
   n=0;
   m=0;
   bs:;
   for(i=0;i<9;i++)
   if(a[i]==1)
   {if(n==4)
    { n=0;/*报数*/
     a[i]=0;
    }
    else
     n++;
    }
   else
    { if(a[i]==0)
     {m++; /*统计出局的人数*/
      a[i]=66;/*避免重复计数*/
     }
     if(a[i]==2)
     {if(m==7)/*只剩下一个人了*/
       break;
      else
       goto bs;
     }
  
   }
  for(i=0;i<9;i++)
  if(a[i]==1)
   printf("%d/n",i);
  }

这次的控制语句做的好些。并且用了final,final_pre。就不用去循环检查了。这样看这爽。虽然效率不一定提高能够

*/

Dinic 网络流24题 圆桌问题 题解

裸Dinic模板题,就不bb了,直接贴代码#include #include #include #include #define MAXN 100000+10 #define oo 0x7ffffff...
  • NOIAu
  • NOIAu
  • 2017年06月07日 20:35
  • 117

网络流24题5 圆桌问题

分析先放一个可以测试的网站——神奇的题库 然后看题: 建图的过程 1. 添加源点s和汇点t 2. 在s与每一个单位i之间连接一条容量为ri的有向边 3. 在每一个单位i与每一个餐桌j...

hdu4841 圆桌问题

圆桌问题 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Total Sub...

网络流24题之圆桌问题

二分图多重最大匹配: 在二分图最大匹配中,每个点(不管是X方点还是Y方点)最多只能和一条匹配边相关联,然而,我们经常遇到这种问题,即二分图匹配中一个点可以和多条匹配边相关联,但有上限,或者说,Li表...

swust1740: 圆桌问题

链接:http://www.oj.swust.edu.cn/problem/show/1740 题意:中文题。 分析:网络流24题第五题。模型比较基础,从超级源连边到每个代表团,容量为他们的人数,...
  • Fsss_7
  • Fsss_7
  • 2016年07月13日 21:24
  • 192

圆桌问题【二分图多重匹配】网络流24题

? 问题描述: 假设有来自 n 个不同单位的代表参加一次国际会议。每个单位的代表数分别为 n i r i , , 2 , 1 ,  = 。会议餐厅共有 m 张餐桌,每张餐桌可容纳 ) , , 2 ,...

1487 圆桌问题

描述 圆桌问题 编号为1—n的n个人围坐在圆桌前,从第一个人开始报数,以1开始,报数为常数m的人离开桌子。n 下个人接着从1开始报数,依次重复进行下去,直到全部人都离开桌子。 要求输出各位离开...

圆桌问题

问题描述 假设有来自 n 个不同单位的代表参加一次国际会议。每个单位的代表数分别为ri,i=1,2,···,n。会议餐厅共有m张餐桌,每张餐桌可容纳ci(i=1,2, ···,m)个代表...

网络流二十四题之五 —— 圆桌问题(TABLE)

圆桌问题

网络流24题之五 圆桌问题 最大匹配

问题描述: 假设有来自 n 个不同单位的代表参加一次国际会议。每个单位的代表数分别为 n i r i , , 2 , 1 ,  = 。会议餐厅共有 m 张餐桌,每张餐桌可容纳 ) , , 2 , 1...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:圆桌问题
举报原因:
原因补充:

(最多只允许输入30个字)