C语言中我如果看到一个题目,我该如何着手去编写程序

不要和我说什么写多了自然会,我看到一个题目不知道如何下手, 比如写一个函数,要实现什么功能,我该如何去分析,用循环还是用什么, 但是如何去写呢,我相信这也是很多新手遇到的问题,我该如何去写这个功能 呢?请看清题目,是怎样去写一个函数功能 例如做一个小游戏,21个人围成一个圈,编号依次为1~21。从第1号开始报数,报到5的倍数的人离开,一直报下去直到最后只剩下1人,求出此人的编号. 我知道是用循环,或者指针,我该怎样去分析呢,请给我思路,行吗, 我相信,问题都是一通百通,我想知道怎样去着手和分析; 比如设几个变量,变量之间怎么联系起来等等

第1个回答  2019-10-06
面向过程
编程的一般思路:分析问题->设计流程和模块->编码和测试->改进并总结
做算法问题的一般思路:先用
数学方法
计算分析,充分理解问题。在思考程序哪些地方应该用循环、指针或数组等细节问题之前,先要确定程序的大体框架,可以自己先试着用
伪代码
描述整个算法,然后再一步步的确定应该怎么编码。最后验证结果并反思能否改进算法。
本题思路: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
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
评论
0
15
加载更多
第2个回答  2020-08-21
首先,不要被C遮住了眼睛。如何解决问题其实是在于算法。而C只是实现算法的手段之一。你可以通过画流程图先把思路理清楚。流程图画对之后用什么语句一看就知道了。
相似回答