当前位置: 代码迷 >> C语言 >> 求助 帮看看程序 那错了
  详细解决方案

求助 帮看看程序 那错了

热度:146   发布时间:2008-02-03 16:22:04.0
求助 帮看看程序 那错了
N个人组成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位?
那位打个看看我的程序那错了! 谢谢了
#include<stdio.h>
f(int *pt,int n)
{int m,i,t;
m=n%3;
while(n>=3)
{n=(n-n/3);
for(i=1;i<=n;i++)
   {if(i=3) continue;
    t=i/3;
   *(pt+i-t-1)=*(pt+t);
   }
   for(i=n;i>=1;i++)
   *(pt+i-1+m)=*(pt+i-1);
   for(i=1;i<=m;i++)
   *(pt+i-1)=*(pt+n-m+1);

}
for(i=0;i<n;i++)
  printf("%d",*(pt+i));
  }
  #define N 5
  void main()
  {int a[N],*p,i;
   p=a;
  for(i=0;i<N;i++)
    a[i]=i+1;
f(p,N);
}
搜索更多相关的解决方案: int  void  continue  

----------------解决方案--------------------------------------------------------
偶写的:
#include<stdio.h>
#include<stdlib.h>
int judge_(int* array,int n)  //判断是否只剩一人
{
    int count=0,flag=-1;
    for(int i=0;i<n;i++)
        if(array[i]==0) { flag=i+1; count++;}
    if(count==1) return flag;
    else return 0;
}
int reslut(int n)
{
    int * people=(int*)malloc(sizeof(int)*n);  
    int i=0,rlst=-1,m=0;
    for(;i<n;i++) people[i]=0;
    for(i=1;;)
    {
        if(rlst=judge_(people,n)) { free(people); return rlst; }
        //第m+1个人没出去
        if(!people[m])
        {
            if(i==3) //数到三
            {
                 people[m%n]=1; i=1;
            }
            else i++;
            m=(m+1)%n;
        }
        else  //第m+1个人出去
        {
                    while(people[(++m)%n]);
           if(i==3)  
           {
            people[m%n]=1; i=1;
           }
           else  //否则
           {
               i++;
           }
                      m=(m+1)%n;
        }
    }
}
int main(void)
{
   int n;
    while(scanf("%d",&n)!=EOF) printf("%d\n",reslut(n));
  return 0;
}

[[it] 本帖最后由 中学者 于 2008-2-3 18:12 编辑 [/it]]
----------------解决方案--------------------------------------------------------
楼主的意思是循环报数吗?最后剩下两个的那种?
----------------解决方案--------------------------------------------------------
我知道那错了!!谢谢支持 重新发一遍!
#include<stdio.h>
void f(int *pt,int n)
{int m,i,t;
while(n>=3)
{m=n%3;
for(i=0;i<n;i++)
   {if((i+1)%3==0) continue;
    t=(i+1)/3;
   *(pt+i-t)=*(pt+i);
   }
   for(i=n-1;i>=0;i--)
   *(pt+i+m)=*(pt+i);
   for(i=0;i<m;i++)
   *(pt+i)=*(pt+n-1);
n=(n-n/3);

}
for(i=0;i<n;i++)
  printf("%5d",*(pt+i));
  }
  #define N 5
  void main()
  {int a[N],*p,i;
   p=a;
  for(i=0;i<N;i++)
    {a[i]=i+1;
    printf("%2d",a[i]);
    }
    printf("\n");
    f(p,N);
getch();
}
----------------解决方案--------------------------------------------------------
  相关解决方案