一个自然数N被8除余1,所得的商N1被8除也余1,
而第二次的商N2(N2 为N1 除以8的结果) 被8除后余7,将第二次的商N2再除以8得到一个商为a.
又知这个自然数N被17除的余数是4.这个N被17除之后的商为M,M被17除之后得到商为B,余数为15, 又知道B是a的2倍.
求这个自然数.
------解决方案--------------------
参考一下:
- Java code
public class DivideBy8{ public static void main(String[] args) { //第一种算法,从a=1开始计算这个数;按第2个逻辑从B=2开始计算,看两个数是否相等。 int x,y; System.out.println(" ------------ 第一种算法 -----------------"); for(int i=1;;i++) { x=((8*i+7)*8+1)*8+1; y=(2*i*17+15)*17+4; if(x==y) { System.out.println("This number is "+x+" and B is "+ (2*i)+" and a is "+i); break; } } //第二种算法,从513开始计算,看是否符合题目的两个逻辑。 System.out.println(" ------------ 第二种算法 -----------------"); for(int i=513;;i++) { if((i%8==1)&&(i%17==4)&&((i/8)%8==1)&&((i/17)%17==15)&&((i/64)%8==7)&& (i/(17*17)==2*(i/(8*8*8)))) { System.out.println("This number is "+i+" and B is "+(i/(17*17))+ " and a is "+(i/(8*8*8))); break; } } }}
------解决方案--------------------
我也来一个,哈哈!
- Java code
//下面是方法体,自己贴进方法哈!int n, n1, n2, a, b, m; n = 8 + 1;// 初始化变量 while (true) {//死循环,直到判断完毕 m = n / 17;//获得M值,因这些判断值跨度比较大,一次相差17,所以先判断。 if (n % 17 == 4 && m % 17 == 15) {//当自然数N被17除(N除以17)的余数是4,商为M,并且M除以17的余数为15时进入 b = m / 17;//获得B的值,用作跟A判断 n1 = n / 8;//开始判断跨度小的。N1是N除以8的商。 if (n1 % 8 == 1) {//N1除以8余1则进入 n2 = n1 / 8;//N2是N1除以8的商。 if (n2 % 8 == 7) {//N2除以8余7则继续判断 a = n2 / 8;//得出N2除以8的商,也就是A if (b / a == 2) {//判断B是否是A的两倍,是则进入,打印并跳出死循环。 System.out.println("This number is " + n); break; } } else { n += 8; } } else { n += 8; } } else { n += 8; } }