1. 質因子
功能:輸入一個正整數,按照從小到大的順序輸出它的所有質數的因子(如180的質數因子爲2 2 3 3 5 )
最後一個數後面也要有空格
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
long num=sc.nextLong();
System.out.println(new Main().getFactor(num)+" ");
}
public String getFactor(long num){
String string="";
if(num==0||num==1||num==2||num==3)
return num+" ";
int i=2;
while(i*i<=num){
if(num%i==0){
string+=i+" ";
num/=i;
i=1;
}
i++;
}
return string+num;
}
}
2. 取近似值
寫出一個程序,接受一個正浮點數值,輸出該數值的近似整數值。如果小數點後數值大於等於5,向上取整;小於5,則向下取整。
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
float f=sc.nextFloat();
String str=f+"";
int i=str.indexOf(".");
char[] chs=str.toCharArray();
long num=Long.valueOf(str.substring(0,i)).longValue();
if(chs[i+1]-'5'>=0)
num+=1;
System.out.println(num);
}
}
注:
1.int轉換爲String
比如int a=1;讓String str=a+"";
2.String轉換爲int
Integer.valueOf(String str).intValue();
3. 合併表記錄
數據表記錄包含表索引和數值,請對錶索引相同的記錄進行合併,即將相同索引的數值進行求和運算,輸出按照key值升序進行輸出。
import java.util.Scanner;
import java.util.Map;
import java.util.TreeMap;
public class Main{
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
int n=Integer.valueOf(sc.nextLine()).intValue();
int i=0;
Map<Integer,Integer> map=new TreeMap<Integer,Integer>();
while(i<n){
String[] strs=sc.nextLine().split(" ");
int key=Integer.valueOf(strs[0]).intValue();
int value=Integer.valueOf(strs[1]).intValue();
if(map.containsKey(key)){
map.put(key,value+map.get(key));
}
else
map.put(key,value);
i++;
}
for(int key:map.keySet()){
System.out.println(key+" "+map.get(key));
}
}
}
注:
1.
boolean |
containsKey(Object key) 如果此映射包含對於指定鍵的映射關係,則返回 true。 |
2.TreeMap和HashMap區別
TreeMap | HashMap |
---|---|
基於紅黑二叉樹的NavigableMap的實現 | 數組方式存儲key/value |
線程非安全 | 線程非安全 |
不允許null | 允許null作爲key和value |
key不可以重複,value允許重複 | key不可以重複,value允許重複 |
存入TreeMap的元素應當實現Comparable接口或者實現Comparator接口,會按照排序後的順序迭代元素,兩個相比較的key不得拋出classCastException | 不保證元素迭代順序是按照插入時的順序 |
主要用於存入元素的時候對元素進行自動排序,迭代輸出的時候就按排序順序輸出 | key的hash值是先計算key的hashcode值,然後再進行計算,每次容量擴容會重新計算所以key的hash值,會消耗資源,要求key必須重寫equals和hashcode方法 |
HashMap:默認初始容量16,加載因子0.75,擴容爲舊容量乘2,查找元素快,如果key一樣則比較value,如果value不一樣,則按照鏈表結構存儲value,就是一個key後面有多個value;
3. Map遍歷
public static void main(String[] args) {
Map<String,String> map=new HashMap<String,String>();
map.put("1", "value1");
map.put("2", "value2");
map.put("3", "value3");
map.put("4", "value4");
//第一種:普通使用,二次取值
System.out.println("\n通過Map.keySet遍歷key和value:");
for(String key:map.keySet())
{
System.out.println("Key: "+key+" Value: "+map.get(key));
}
//第二種
System.out.println("\n通過Map.entrySet使用iterator遍歷key和value: ");
Iterator map1it=map.entrySet().iterator();
while(map1it.hasNext())
{
Map.Entry<String, String> entry=(Entry<String, String>) map1it.next();
System.out.println("Key: "+entry.getKey()+" Value: "+entry.getValue());
}
//第三種:推薦,尤其是容量大時
System.out.println("\n通過Map.entrySet遍歷key和value");
for(Map.Entry<String, String> entry: map.entrySet())
{
System.out.println("Key: "+ entry.getKey()+ " Value: "+entry.getValue());
}
//第四種
System.out.println("\n通過Map.values()遍歷所有的value,但不能遍歷key");
for(String v:map.values())
{
System.out.println("The value is "+v);
}
}
3. Map的存取
put()
get()