人体彩绘裤裆全过程:帮忙啊 C语言问题

来源:百度文库 编辑:神马品牌网 时间:2024/04/29 21:46:39
一队猴子都有编号,编号为1,2,3,……这群猴子(M个)按照1-M的顺序围坐一圈,从一开始数,每到第N个,该猴子就要离开此圈,这样依次下来,直到圈中只有一只猴子,该猴子就是大王
要求:输入M,N,(均为整数)N〈M。
输出形式:中文按照M个猴子,数N个数的方法,输出大王的 猴子是几号,建立一个函数来实现此功能

#define M 20/*定义猴子总数*/
#define S 5/*数猴子轮N出圈*/
main()
{int i,j,k,temp,a[M];
for(i=0;i<M;i++)
a[i]=i+1;
for(i=M-1;i>=0;i--)
{for(k=1;k<=S;k++)
{temp=a[0];
for(j=0;j<i;j++)
a[j]=a[j+1];
a[i]=temp;
}
}
for(i=M-1;i>=0;i--)
printf("%d,",a[i]);
}

#include<iostream.h>
const M 20//猴子总数
const S 5//数猴子轮N出圈
void main()
{
int i,j,k,temp,a[M];
for(i=0;i<M;i++)
a[i]=i+1;
for(i=M-1;i>=0;i--)
{
for(k=1;k<=S;k++)
{temp=a[0];
for(j=0;j<i;j++)
a[j]=a[j+1];
a[i]=temp;
}
}
for(i=M-1;i>=0;i--)
printf("%d,",a[i]);
}

一楼的算法思想是正确的,但是要进行频繁的数组内数据移位操作,效率不高,而且输出格式不符合楼主要求,并且楼主要求建立一个函数来实现功能,而不是主函数。
二楼无耻,抄了一楼的

一下是我的算法,不要进行数组内数据的移位操作,有不明白的可以lovekoala@gmail.com和我联系

#include <stdio.h>
#include <malloc.h>
void SingleKing( int m, int n )
{
int *Monkey,i,count=0,result=0,remain=m;
Monkey =(int * )malloc( m * sizeof(int) );
for( i = 0 ; i < m ; i++ )
Monkey[i] = 0;
i=0;
while( remain > 1 )
{
if( count == n-1 )
{
Monkey[i] = 1;
remain--;
}
while( Monkey[i=(++i)%m] == 1 )
;
count = (count++) % n;
}
if( ++i == 0 )
printf( "按照%d个猴子,数%d个数的方法,大王的猴子是%d号\n",m,n,m );
else
printf( "按照%d个猴子,数%d个数的方法,大王的猴子是%d号\n",m,n,i );
}
//以上为实现的函数,下面的是对上面函数的调用

void main()
{
int m,n;
scanf("%d,%d",&m,&n);
SingleKing( m , n );
scanf("%d",&m);//此处用来暂停,等待用户输入后退出,也可以用getch()
}