猴子选大王

if语句的使用
#include<stdio.h>

int main(int argc, char * argv[])
{
int i,n,p,m;
int a[100];
int j=0;
printf(“请输入总数及标志数\n”);
scanf("%d%d", &n,&m);
p = n;
for ( i = 0; i < n; i++)
{
a[i] = 1;
}
for (i = 0; ; i++)
{
if (i == n)//首先是要对for循环做设定,如果i与猴子总数相等时,对i赋值为0,使得for循环能够无限循环;
i = 0;
if (a[i] == 1)
{
j++;
if (j % m == 0)
{
a[i] = 0;
p --;//p–主要目的是使得剩余猴子总数进行递减
}
}
if (p == 1)//当剩下的猴子为一个时,整个for循环以break结束;
break;
}
for (i = 0; i < n; i++)
{
if (a[i] == 1)//在for循环中,a[i]值仍为1,并没有发生改变的数组第i个值则为我们所需要的值,但是由于数组的特性,输出时要在i的基础上加1;
printf(“猴子大王=%d\n”, i+1);
}
return 0;
}

其实这个函数的算法很简单,主要是if语句的逻辑排列关系。通过这个列子后,发现if语句应当从底层逐渐向高层递进,比如先实现for语句的无限循环,后逐步对被淘汰的数值赋值,最后判断退出循环条件。
指针算法
#include<stdio.h>
void res(int *p,int n,int m);
int main(int argc, char * argv[])
{
int n,m;
int a[100];
printf(“请输入总数及标志数\n”);
scanf("%d%d", &n,&m);
res(a,n,m);
return 0;
}
void res(int *p,int n,int m)
{
int q,j,i;
q = n;
j=0;
int *r=p;
for ( i = 0; i < n; i++)
{
(p+i) = 1;
}
for (i = 0; ; i++)
{
if (i == n)
i = 0;
if (
(p+i) == 1)
{
j++;
if (j % m == 0)
{
(p+i) = 0;
q–;
}
}
if (q == 1)
break;
}
for (i = 0; i < n; i++)
{
if (
(r+i) == 1)
printf(“猴子大王=%d\n”, i+1);
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值