回 帖 发 新 帖 刷新版面

主题:鸡毛加急!c语言竞赛题(数组循环)~求大侠帮帮忙啦!!!

大一新生啦!在图书馆遇到这道题,很有意思,想半天想不出来,求大侠帮帮忙!求指教!要是能有标注就太感谢啦!
题目:2k个人站成一圈,前k个是好人,后k个是坏人,依次报数,指定报到m,求m的最小值,使得所有报m的人出局,然后继续从下一个人(是出局人后面的一个,不是最开始的第一个人)开始从1报数,最后使得好人都留下来。[输入:输入有若干个k,最后一个值是0,假设0<k<14    输出:对应每个输入的k,输出相应的m]
    样例输入 3 4 0
    样例输出 5 30

补充:用c语言解题~

回复列表 (共1个回复)

沙发

这是源代码:
#include<stdio.h>
void main()
{
    int i,k,m,a[100],n,t;
    int b[20],v=0,j;
    int x,y;
    printf("请输入一组k(最后以“0”为结束标志):\n");
    for(j=1;;j++)
    {
        scanf("%d",&b[j]);
        if(b[j]==0)break;
        v++;
    }
    for(j=1;j<=v;j++)
    {
        k=b[j];
        for(m=1;;m++)
        {
        for(i=1;i<=2*k;i++)a[i]=i;
        t=0;n=0;
        for(i=1;t<k;i++)
        {
        if(a[i]!=0)n++;
        if(n==m){a[i]=0;n=0;t++;}
        if(i==2*k)i=0;
        }
        x=0;y=0;
    for(i=1;i<=k;i++)
        if(a[i]!=0)x++;
    for(i=k+1;i<=2*k;i++)
        if(a[i]==0)y++;
        if(x==k&&y==k){printf("%d ",m);break;}
        }
    }
    printf("\n");
}

我来回复

您尚未登录,请登录后再回复。点此登录或注册