题目:
一个自然数被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分
11 人评分
兰顿蚂蚁 (C++代码)浏览:1225 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:583 |
C语言程序设计教程(第三版)课后习题8.6 (C语言代码)浏览:631 |
WU-C语言程序设计教程(第三版)课后习题12.1 (C++代码)浏览:1024 |
简单的a+b (C语言代码)浏览:878 |
C语言程序设计教程(第三版)课后习题9.1 (C语言代码)浏览:710 |
打印十字图 (C语言代码)浏览:2820 |
Minesweeper (C语言描述,蓝桥杯)浏览:1176 |
C语言程序设计教程(第三版)课后习题5.4 (C语言代码)浏览:903 |
字符串输入输出函数 (C语言代码)浏览:2604 |