c语言题目不知道该怎么编 5
编写一个程序,设置变量m为短整型,且数值为八进制整数0177501,设置变量为短整型,且数值为八进制整数-0277,打印显示出变量m和n所表示的十进制整数,并上传程序和运...
编写一个程序,设置变量m为短整型,且数值为八进制整数0177501,设置变量为短整型,且数值为八进制整数-0277,打印显示出变量m和n所表示的十进制整数,并上传程序和运行结果截图
展开
1个回答
展开全部
面向过程编程的一般思路:分析问题->设计流程和模块->编码和测试->改进并总结
做算法问题的一般思路:先用数学方法计算分析,充分理解问题。在思考程序哪些地方应该用循环、指针或数组等细节问题之前,先要确定程序的大体框架,可以自己先试着用伪代码描述整个算法,然后再一步步e69da5e6ba907a686964616f31333330336238的确定应该怎么编码。最后验证结果并反思能否改进算法。
本题思路:1.在草稿纸上简单的分析发现,这个报数过程可以用数组来模拟。
2.建一个21位的数组,数组索引代表每个人的编号,数组值代表1代表在圈中0代表离开。
3.在只剩一人之前不断的循环报数,故考虑用while循环。
4.while没循环一次就相当于报一个数(num++),如果此时报的数能被5整除,就把数组索引(i)处的值改为0,然后下一个人报数(i++)。i大于21的时候需要把i变成i除21的余数(人是围成一个圈编号21的下一位是1)。
5.考虑一般情况,所以把人数和报数倍数定义为宏,就能只修改宏的值就能计算所有的此类问题
#include <stdio.h>
#include <conio.h>
#define N 21//人数
#define M 5//报数的倍数
int main()
{
int i,
num,//报的数字
left = N,//圈子剩余的人数
people[N];//1表示还在圈中,0表示出去
for(i=0;i<N;++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<N;++i)
{
if(people[i]==1)
printf("Id:%d",i+1);
}
getch();
return 0;
}
编程很难一蹴而就。自己完全独立的完成一些问题,由易到难循序渐进。就能慢慢进步。
做算法问题的一般思路:先用数学方法计算分析,充分理解问题。在思考程序哪些地方应该用循环、指针或数组等细节问题之前,先要确定程序的大体框架,可以自己先试着用伪代码描述整个算法,然后再一步步e69da5e6ba907a686964616f31333330336238的确定应该怎么编码。最后验证结果并反思能否改进算法。
本题思路:1.在草稿纸上简单的分析发现,这个报数过程可以用数组来模拟。
2.建一个21位的数组,数组索引代表每个人的编号,数组值代表1代表在圈中0代表离开。
3.在只剩一人之前不断的循环报数,故考虑用while循环。
4.while没循环一次就相当于报一个数(num++),如果此时报的数能被5整除,就把数组索引(i)处的值改为0,然后下一个人报数(i++)。i大于21的时候需要把i变成i除21的余数(人是围成一个圈编号21的下一位是1)。
5.考虑一般情况,所以把人数和报数倍数定义为宏,就能只修改宏的值就能计算所有的此类问题
#include <stdio.h>
#include <conio.h>
#define N 21//人数
#define M 5//报数的倍数
int main()
{
int i,
num,//报的数字
left = N,//圈子剩余的人数
people[N];//1表示还在圈中,0表示出去
for(i=0;i<N;++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<N;++i)
{
if(people[i]==1)
printf("Id:%d",i+1);
}
getch();
return 0;
}
编程很难一蹴而就。自己完全独立的完成一些问题,由易到难循序渐进。就能慢慢进步。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询