您的位置:首页 > 其它

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

2012-11-09 16:41 169 查看
题意:有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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: