今天在一个论坛上看到一个关于猴子选大王的源代码,看了以后,里面有几处的错误,就动手改了一下,发出来,给朋友们看看。
++++++++++++++++++++++++++++++++++
#include<stdio.h>
#define M 10/*定义猴子总数*/
#define S 3/*数猴子轮N出圈*/
void main()
{
int i,j,k,temp,a[M];
for(i=0;i<M;i++)
a[i]=i+1;
for(i=0;i<M;i++)
printf("原始的数组顺序如下:%d ",a[i]);
printf("/n");
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]);
}
++++++++++++++++++++++++++++++++++
这个程序的输入是猴子出列的顺序,数组的第一个就是大王的编号,呵呵
上面的输入结果如下:
1 2 3 4 5 6 7 8 9 10
3 6 9 2 7 1 8 5 10 4 Press any key to continue
可见,大王就是4。
在数组定义的时候不能用变量来定义数组的长度,所以,有多少猴子参加选大王,就只能在程序中设定了,但是
数到几猴子出列,这个可以随机的设定,下面是用户输入这个值的程序:
=====================================================
#include<stdio.h>
#include<dos.h>
#define M 10/*定义猴子总数*/
void main()
{
int i,j,k,temp,a[M],S;
for(i=0;i<M;i++)
a[i]=i+1;
for(i=0;i<M;i++)
printf("%d ",a[i]);
printf("/n请输入数到几猴子出圈:");
scanf("%d",&S);
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]);
}
=====================================================
输出结果是:
1 2 3 4 5 6 7 8 9 10
请输入数到几猴子出圈:3
3 6 9 2 7 1 8 5 10 4 Press any key to continue
还有一种情况就是,轮到每个猴子,他都报出一个数字,数到这个数字的猴子出列,这样就更公平了,呵呵……
程序如下:
================================
#include<stdio.h>
#include<dos.h>
#define M 10/*定义猴子总数*/
void main()
{
int i,j,k,temp,a[M],S;
for(i=0;i<M;i++)
a[i]=i+1;
for(i=0;i<M;i++)
printf("%d ",a[i]);
printf("/n");
for(i=M-1;i>=0;i--)
{
printf("请输入出列的数:");
scanf("%d",&S);
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]);
}
================================
结果如下,一次是按照每次都是3的,另外一次是随机输入的
1 2 3 4 5 6 7 8 9 10
请输入出列的数:3
请输入出列的数:3
请输入出列的数:3
请输入出列的数:3
请输入出列的数:3
请输入出列的数:3
请输入出列的数:3
请输入出列的数:3
请输入出列的数:3
请输入出列的数:3
3 6 9 2 7 1 8 5 10 4 Press any key to continue
1 2 3 4 5 6 7 8 9 10
请输入出列的数:3
请输入出列的数:6
请输入出列的数:5
请输入出列的数:7
请输入出列的数:8
请输入出列的数:9
请输入出列的数:5
请输入出列的数:4
请输入出列的数:2
请输入出列的数:6
3 9 5 4 7 2 6 8 1 10 Press any key to continue
通过比较,这样的结果是一样的,呵呵……