首页 > 代码库 > 约瑟夫
约瑟夫
#include<stdio.h>
static int arr[100];
void main()
{
void solve(int people,int spacing);
int people,spacing,i,j=0;
printf("请输入总人数(2-99):");
scanf("%d",&people);
printf("请输入报数(1-10):");
scanf("%d",&spacing);
solve(people,spacing);
printf("\n离开顺序为:\n");
for(i=people-1;i>=0;i--)
{
if(arr[i]==0)
printf("%4d",arr[i]+people);
else
printf("%4d",arr[i]);
j++;
if(j%15==0) printf("\n");
}
if(j%15!=0) printf("\n");
}
int change(int number,int spacing,int mancount)
{
if (number==0) number=mancount-1;
return((number+spacing)%mancount);
}
void solve(int people,int spacing)
{
int i,j,temp,sum=0;
for(i=2;i<=people;i++)
{
sum+=i-1;
temp=sum;
for(j=0;j<i-1;j++)
{
arr[j]=change(arr[j],spacing,i);
temp-=arr[j];
}
arr[i-1]=temp;
}
}
或:
#include<stdio.h>
int f(int *p,int a,int b)
{
int i=0,j=0,k=0;
while(i<a)//i代表退出人数,j代表当前的人
{
if(*(p+j)!=0)
k++;
if(k==b)
{
printf("%5d",*(p+j));
*(p+j)=0;
k=0;
i++;
if(i%10==0)
printf("\n");
}
j++;
if(j==a)
j=0;
}
return 0;
}
int main()
{
int num[50];
int a,b;
printf("请输入人数 报数");
scanf("%d%d",&a,&b);
int i;for(i=0;i<a;i++)
num[i]=i+1;
f(num,a,b);
return 0;
}
约瑟夫