|

楼主 |
发表于 2013-3-31 13:17:01
|
显示全部楼层
- #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;
- }
- }
-
复制代码 |
|