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);
}
}