poj1021 约瑟夫问题 利用数学公式

来源:互联网 发布:山西网络广播电视台 编辑:程序博客网 时间:2024/05/18 03:03

题意:有k个好人和k个坏人 他们排成一列 并且规则是 前k个为好人 后k个为坏人 让你把后k个坏人除去 有一个条件是k个好人 都存在。

#include<stdio.h>#include<string.h>int ans[15]={0};int main(){    int k;    int m=6;    int pNum[30];    while(scanf("%d",&k),k)    {      /*  if(ans[k]!=0)        {            printf("%d\n",ans[k]);            continue;        }        */把这段删除 会超时。哎..数据挺诡异滴      memset(pNum,0,sizeof(pNum));        m=k;        for(int i=1; i<=k; i++)        {            pNum[i]=(pNum[i-1]+m-1)%(2*k-i+1);            if(pNum[i]<k)            {                i=0;                m++;            }        }        ans[k]=m;        printf("%d\n",m);    }    return 0;}