笔试的时候,最后因为没有约分,结果线上编译总是过不了,好可惜~
package com.bjut.SaiMa.JingDong;
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
/**2016/9/5
* 给一个数N,计算N变换成2到N-1进制的数字的和的平均值。
* 比如:N=4,
* N,2进制:100,数字和为1
* N,3进制:11,数字和为2
* 那么,计算结果=(1+2)÷2 = 3/2
*
* */
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (in.hasNextInt()) {
ArrayListarray = new ArrayList();
array.add(in.nextInt());
for (int i = 0; i < array.size(); i++) {
int result = 0;//所有2到n-1进制的各位数和
int max = array.get(i); //表示n
for (int j = 2; j < array.get(i); j++) {
int temp = j;
int temp1 = 0;
//求对应进制的各位数,相除取余
while (temp >= j) {
temp1 += max % j;
temp = temp / j;
}
temp1 += temp;
result += temp1;
}
//辗转相除法求最大公约数为temp
int a = result;
int b = array.get(i) - 2;
int temp = 0;
while (a % b != 0) {
temp = a % b;
a = b;
b = temp;
}
System.out.println(result/temp+"/"+(array.get(i)-2)/temp);
}
}
}
}
辗转相除法在牛客上的华为在线编程最后一题刷过。如下:
求最小公倍数
热度指数:1713时间限制:1秒空间限制:32768K
算法知识视频讲解
题目描述
正整数A和正整数B 的最小公倍数是指 能被A和B整除的最小的正整数值,设计一个算法,求输入A和B的最小公倍数。
输入描述:
输入两个正整数A和B。
输出描述:
输出A和B的最小公倍数。
输入例子:
5
7
输出例子:
35
package com.bjut.NewCoder_HuaWei;
import java.util.Scanner;
public class HuaWei108 {
/**
* [编程题]求最小公倍数
*
* 正整数A和正整数B 的最小公倍数是指 能被A和B整除的最小的正整数值,设计一个算法,求输入A和B的最小公倍数。
*
* 输入描述:输入两个正整数A和B。
* 输出描述:输出A和B的最小公倍数。
*
* 总结:【辗转相除法】效率高
*
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in = new Scanner(System.in);
while (in.hasNext()) {
int A = in.nextInt();
int B = in.nextInt();
//最小公倍数 = 两数之积除以最大公约数
//辗转相除法求最大公约数(效率高)
int A1 = A, B1 = B;
int temp = 1;
while ((temp = A % B) > 0) {
A = B;
B = temp;
}
System.out.println(A1 * B1 / B);
}
}
}