面向过程编程的一般思路:分析问题->设计流程和模块->编码和测试->改进并总结
做算法问题的一般思路:先用数学方法计算分析,充分理解问题。在思考程序哪些地方应该用循环、指针或数组等细节问题之前,先要确定程序的大体框架,可以自己先试着用伪代码描述整个算法,然后再一步步的确定应该怎么编码。最后验证结果并反思能否改进算法。
本题思路:1.在草稿纸上简单的分析发现,这个 数过程可以用数组来模拟。
2.建一个21位的数组,数组索引代表每个人的编 ,数组值代表1代表在圈中0代表离开。
3.在只剩一人之前不断的循环 数,故考虑用while循环。
4.while没循环一次就相当于 一个数(num++),如果此时 的数能被5整除,就把数组索引(i)处的值改为0,然后下一个人 数(i++)。i大于21的时候需要把i变成i除21的余数(人是围成一个圈编 21的下一位是1)。
5.考虑一般情况,所以把人数和 数倍数定义为宏,就能只修改宏的值就能计算所有的此类问题
#include
#include
#define N 21//人数
#define M 5// 数的倍数
int main()
{
int i,
num,// 的数字
left = N,//圈子剩余的人数
people[N];//1表示还在圈中,0表示出去
for(i=0;i
people[i]=1;
//开始 数
i=0;
num=0;
// 数一个回合
while(left>1)
{
if(i>=N)
i=i%N;
if(people[i]==1)
{
++num;
if(num%M==0)
{
people[i]=0;
–left;
}
}
++i;//继续
}
for(i=0;i
{
if(people[i]==1)
printf(“Id:%d”,i+1);
}
getch();
return 0;
}
编程很难一蹴而就。自己完全独立的完成一些问题,由易到难循序渐进。就能慢慢进步。
取消
评论
相关资源:GHOST系统只剩C盘数据恢复软件_ghost分区丢失只剩c盘数据恢复…
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!