POJ3750

来源:互联网 发布:java求职简历自我评价 编辑:程序博客网 时间:2024/06/03 21:46
#include <iostream>#include <stdio.h>#include <cstring>using namespace std;int main(){    int i,j,w,s,n;    char a[65][16];    int p[65];    scanf("%d",&n);    for(i=1;i<=n;i++)    {        p[i]=i;        scanf("%s",&a[i]);    }    scanf("%d,%d",&w,&s);    w=(w+n)%n;    while(n-1){        w=(w+s-1)%n;        printf("%s\n",a[p[w]]);        for(j=w;j<n;j++)            p[j]=p[j+1];            n--;             cout<<w<<" "<<n<<endl;    }    return 0;}//WA代码↑




POJ3750


题意:约瑟夫环问题。


输入:
n(人数)
str(人的姓名)
w(起始下标)s(间隔人数)


输出:
str(人的姓名)


思路:约瑟夫环问题,直接模拟起始w=(w+n-1)%n,出去下标w=(w+s-1)%n,在后面要把环的下标更新即可。


AC代码:
#include <iostream>#include <stdio.h>#include <cstring>using namespace std;int main(){    int i,j,w,s,n;    char a[65][16];    int p[65];    scanf("%d",&n);    for(i=0;i<n;i++)    {        p[i]=i;        scanf("%s",&a[i]);    }    scanf("%d,%d",&w,&s);    w=(w+n-1)%n;    while(n){        w=(w+s-1)%n;        printf("%s\n",a[p[w]]);        for(j=w;j<n-1;j++)            p[j]=p[j+1];            n--;            // cout<<w<<" "<<n<<endl;    }    return 0;}


0 0