进制均值:尽管是一个CS专业的学生,小B的数学基础很好并对数值计算有着特别的兴趣,喜欢用计算机程序来解决数学问题,现在,她正在玩一个数值变换的游戏。她发现计算机中经常用不同的进制表示一个数,如十进制数123表达为16进制时只包含两位数7、11(B),用八进制表示为三位数1、7、3,按不同进制表达时,各个位数的和也不同,如上述例子中十六进制和八进制中各位数的和分别是18和11,。小B感兴趣的是,一个数A如果按2到A-1进制表达时,各个位数之和的均值是多少?她希望你能帮她解决这个问题? 所有的计算均基于十进制进行,结果也用十进制表示为不可约简的分数形式
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Main {
//10进制转换任意进制,并将每位数字存入list中,返回各位数字之和
public static int transForm(int num, int n){
List<Integer> list = new ArrayList<>();
int sum = 0;
while(num != 0){
int remainder = num%n;
num = num/n;
list.add(remainder);
}
for(int i = 0; i < list.size(); i++){
sum += list.get(i);
}
return sum;
}
//辗转相除,计算两个数的最大公约数
public static int gcd(int m, int n){
int r = m % n;
while (r != 0){
m = n;
n = r;
r = m % n;
}
return n;
}
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int m = sc.nextInt();
int sum = 0, div;
div = m - 2; // 分子
for(int i = 2; i < m; i++){
sum += transForm(m, i);
}
System.out.println(sum/gcd(sum, div) + "/" + div/gcd(sum, div));
}
}
幸运数:小明同学学习了不同的进制之后,拿起了一些数字做起了游戏。小明同学知道,在日常生活中我们最常用的是十进制数,而在计算机中,二进制数也很常用。现在对于一个数字x,小明同学定义出了两个函数f(x)和g(x)。f(x)表示把x这个数用十进制写出后各个数位上的数字之和。如f(123)=1+2+3=6。g(x)表示把x这个数用二进制写出后各个数位上的数字之和。如123的二进制表示为1111011,那么,g(123)=1+1+1+1+0+1+1=6。 小明同学发现对于一些正整数x满足f(x)=g(x),他把这种数称为幸运数,现在他想知道,小于等于n的幸运数有多少个?
import java.util.*; public class Main { public static void main(String[] args){ int sum = 0 ; Scanner sc = new Scanner(System.in); int n = sc.nextInt(); for(int i = 1 ;i<=n;i++){ if(f(i)==g(i)){ sum++; } } System.out.println(sum); } public static int f(int n){ List<Integer> list = new ArrayList<>(); int sum = 0 ; while(n>0){ int remain = n%10; n = n/10; list.add(remain); } for(int i = 0 ;i<list.size();i++){ sum = sum + list.get(i); } return sum ; } public static int g(int n ){ int sum = 0 ; String str = Integer.toBinaryString(n); char []c = str.toCharArray(); for(int i=0;i<c.length;i++){ if(c[i]=='1'){ sum ++; } } return sum ; } }
集合合并:给你两个集合,要求{A} + {B}。 注:同一个集合中不会有两个相同的元素
import java.util.Iterator; import java.util.Scanner; import java.util.TreeSet; public class Main { public static void main(String [] args){ Scanner scan=new Scanner(System.in); int a=scan.nextInt(); int b=scan.nextInt(); TreeSet<Integer> ts=new TreeSet<Integer>(); for(int i=0;i<a;++i){ ts.add(scan.nextInt()); } for(int i=0;i<b;++i){ ts.add(scan.nextInt()); } Iterator<Integer> it=ts.iterator(); System.out.print(it.next()); while(it.hasNext()){ System.out.print(" "+it.next()); } } }