当前位置: 代码迷 >> C语言 >> [讨论]评价一下这个算法啊
  详细解决方案

[讨论]评价一下这个算法啊

热度:345   发布时间:2006-09-19 17:07:04.0
[讨论]评价一下这个算法啊
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) ;
}
}
----------------解决方案--------------------------------------------------------
  相关解决方案