京東筆試題目

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






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章