题目:
一个自然数被8除余1,所得的商被8除也余1,再将第二次的商被8除后余7,最后得到一个商为a。
又知这个自然数被17除余4,所得的商被17除余15,最后得到一个商是a的2倍。
求这个自然数。
解题思路:
1.根据题目提示,推算出可能符合条件的最小自然数num,缩小范围:
题目中被17除余的条件中说到“最后得到一个商是a的2倍”,由此可知a必然大于0。
取a=1,则自然数num除以17的商,再除以17的商为2。
那么此时num=(17*2+15)*17+4=837,也就是说可能符合条件的最小自然数为837。
2.根据被8除余的条件,依次使用判断语句,判断num是否符合该条件——
2.1.num首先对8求余,若余数为1,则进行2.2的判断
2.2.num除以8得到一个商,该商对8求余,若余数为1,则进行2.3的判断
2.3.用num除以8得到的商,再除以8得到新商,该新商对8求余,若余数为7,则进行2.4
2.4.用2.3中得到的新商除以8,得到的第三个商,即题目中表述的“最后得到一个商为a”中的a
2.5.判断a是否大于0,若大于0则改变标记变量停止循环,并将a的值返回给主函数;否则弃之,num自增1重新开始判断
3.根据被17除余的条件,依次使用判断语句,判断num是否符合该条件,与第二步类似,不再赘述。
4.在主函数中,根据接收到的返回值,分别推算出两个函数中各自产生的自然数,记为num1、num2:
通过dbe、dbs、num1、num2分别记录被8除余得到的商、被17除余得到的商、8对应的自然数、17对应的自然数,可以有效减少函数的调用,提高程序的效率。
5.若17中商dbs是8中商dbe的2倍,且两个函数中产生的自然数num1和num2相等,输出这个自然数,结束程序即可
6.否则,将两个自然数中更小的那个+1后,再赋值给num ,再从第二步开始重复操作即可
参考代码:
#include<stdio.h>
int DivideByEight(int num){
int a,mark=1;
while(mark==1){
if(num%8==1){ //若自然数num被8除余1,则继续判断
if((num/8)%8==1){ //若第一步所得的商,也被8除余1,则继续判断
if(((num/8)/8)%8==7){ //若第二步所得的商,被8除余7,则将三次被8除后的商赋值给a
a = ((num/8)/8)/8;
if(a>0){ //a被赋新值之后,判断其是否符合题意
mark = 0;
}
}
}
}
num++; //以上判断未全部通过,则自然数自增1,重复判断
}
return a;
}
int DivideBySeventeen(int num){
int a,mark=1;
while(mark==1){
if(num%17==4){
if((num/17)%17==15){
a = (num/17)/17;
if(a>0){
mark = 0;
}
}
}
num++;
}
return a;
}
int main(void){
int num=837; //根据题意,可能符合条件的最小的自然数为837
int mark=1;
int result;
int num1,num2;
int dbe,dbs;
while(mark==1){
dbe = DivideByEight(num); //被8除三次后得到的商
dbs = DivideBySeventeen(num); //被17除两次后得到的商
num1 = ((17*dbs+15)* 17+4) + 1; //推算出此时DivideBySeventeen函数中对应的num值,并加1
num2 = (((8*dbe+7)* 8+1)* 8+1) + 1; //推算出此时DivideByEight函数中对应的num值,并加1
if(((2*dbe)==dbs)&&(num1==num2)){
result = (17*dbs+15)* 17+4; //这里用17或是8来推算均可
printf("%d",result);
mark = 0;
}
else{ //若不是要找的自然数,则将两个自然数中小的那个+1后,再赋值给num
if(num1>num2){
num = num2;
}else{
num = num1;
}
}
}
return 0;
}0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复