#include <stdio.h>
#include <stdlib.h>
int paixu ( int *, int , int ,int ,int *, int * );
int blSZ ( int * ,int );
int main(int argc, char *argv[])
{
int i,n,m;
printf("输入人数和随机数\n");
scanf ( "%d %d",&n,&m );
if (m>n)
{
printf("输入错误.\n");
system ("Pause");
return 0 ;
}
int a[n];
for ( i=0 ; i<n ;i++ ) //数组置1 ,淘汰则被置 0;
{
a[i]= 1;
}
paixu ( a , n, m ,0, a, a);
for ( i=0 ; i<n ;i++ )
{
printf("a[%d]=%d \n",i,a[i]);
}
system ( "Pause" );
return 0;
}
int paixu ( int *P ,int N , int M ,int iJishu, int *iWeizhi,int *iChaxun )
{
if (blSZ( P,N )==1)
{
return ;
}
else
{
// iChaxun指向最后一个数组元素时的处理.
if (iChaxun-P==N)
{
if (iJishu<M)
{
if (*iChaxun==0)
{
iChaxun=P;
}
if (*iChaxun==1)
{
iJishu++;
}
}
if (iJishu==M)
{
*iChaxun=0;
iJishu=0;
}
//查询起始数组元素位于数组尾时
if (iWeizhi-P==N)
{
iWeizhi=P;
iChaxun=iWeizhi;
}
else
{
iChaxun=P;
}
}
/////////////////////////////////////////////
// 计数 查询 置 0
if (iChaxun-P<N)
{
if (*iChaxun==0)
{
iChaxun++;
}
if (*iChaxun==1)
{
iJishu++;
if (iJishu==M)
{
iJishu=0;
iWeizhi ++;
*iChaxun=0;
iChaxun=iWeizhi;
}
if (iJishu<M)
{
iChaxun ++;
}
}
}
}
return paixu(P, N , M, iJishu ,iWeizhi , iChaxun );
}
int blSZ ( int *sz ,int n )
{
int i;
int temp=0 ;
for ( i=0 ; i<n ; i++ ) //遍历数组,查看值是否为1,是否只剩下一个人 ;
{
temp += *sz++ ;
}
if (temp==1)
{
return 1;
}
else
{
return 0;
}
}
|