[讨论]评价一下这个算法啊
10个人围成一个圈,从第1个人开始数,数到第6个人,该第6个人出圈,然后从下一个人开始继续数到6出圈,循环出圈直到剩下最后一个人为胜者。#include "stdio.h"
void main()
{
char n[50][50];
int m,j,i,k,l,h;
printf("请输入参加游戏的人数:");
scanf("%d",&m);
for(i=0;i<m;i++)
{
fflush(stdin);
printf("\n第%d个人的姓名:",i+1);
gets(n[i]);
}
printf("\n请输入出圈基数(即数到第几个人出圈):");
scanf("%d",&j);
h=j;
for(i=1,k=m;i<m;i++,h+=j)
{
h=(h-1)%(k-i+1);
printf("第%d个出圈的是:%s\n",i,n[h]);
for(l=h;l<m;l++)
{
n[l]=n[l+1];
}
}
printf("\n最后剩下的是:%s\n",n[0]);
}
----------------解决方案--------------------------------------------------------
怎么没人顶啊 我自己来
----------------解决方案--------------------------------------------------------
ok
----------------解决方案--------------------------------------------------------
我顶,我有个思路,望指点.
main()
{
int a[10]={8,8,8,8,8,8,8,8,8,8};
int k,i,c=10,n;
for(n=0; ;n++) /*假定N为10*/
{
if(a[n]==8)
k=k+1; /*记数器增加*/
if(k==6) /*是否为第六次*/
{
a[n]=0;
k=0; /*重新从1报号*/
c=c-1; /*记数器减小*/
if(c==1) break; /*剩下的数是否小于一*/
}
}
printf("%d\n",n);
getch();
}
----------------解决方案--------------------------------------------------------
这是个思路,结果运行不对.望能完善一下.谢谢,很想接教你这个朋友 QQ 262437227 我已经加你QQ了,请按确定
----------------解决方案--------------------------------------------------------
我只算了10个人的情况...
看下对吧?
#include <stdio.h>
void main()
{
int i,m=0,count=0;
int sz[200];
for (i=0;i<200;i++)
sz[i]=8;
for (i=0;i<200;i++)
{
if(sz[i]==0)
{
count--;
}
count++;
if(count==6)
{
for(m=0;m<=14;m++)
sz[i%10+10*m]=0;
count=0;
if(sz[i]!=0&&sz[i]==sz[i+10])
break;
}
}
for(i=0;i<10;i++)
{
if (sz[i]!=0)
printf("最后剩下的是%d号",i+1) ;
}
}
----------------解决方案--------------------------------------------------------