進制均值:儘管是一個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());
}
}
}