?歡迎來到演算法入門到王者之路專欄,一起學習,一起進步?
前言
大家好,我是全世界最強男人-白胡子,從今天開始我打算立一個flag,就是連續刷題48天,每天最少兩道編程題,外加選擇題不等,還望大家監督!!!,如果到時候一起刷題的人多的話,我會建一個演算法交流群,主要還是看大家的想法啦,

一、選擇題
1:在 Java 中,存放字串常量的物件屬于( )類物件,
A Character
B String
C StringBuffer
D Vector
決議:先不給大家說答案,大家先自己想一下自己心中的答案是什么,
選B,存放字串常量的物件都屬于String類物件,
2:關于下列程式段的輸出結果,說法正確的是:( )
public class MyClass{
static int i;
public static void main(String args[]){
System.out.println(i);
}
}
A 有錯誤,變數i沒有初始化,
B null
C 1
D 0
決議:
如果沒有初始化靜態變數的話,結果就會是0.這個結論大家記住就好了,我再給大家運行一下程式,選D

3:下列代碼的執行結果是:( )
public class Test3{
public static void main(String args[]){
System.out.println(100%3);
System.out.println(100%3.0);
} }
A 1和1
B 1和1.0
C 1.0和1
D 1.0和1.0
決議:這個很好理解,整數取余整數結果也是整數,對浮點型取余結果就是浮點數,就算忘了的話,記住就好啦,選B
4:
在基本 JAVA 型別中,如果不明確指定,整數型的默認是 __ 型別,帶小數的默認是 __ 型別? ( )
A int float
B int double
C long float
D long double
決議:同上一道題,記住就好了,如果你忘了的話,選B
5: 方法通常存盤在行程中的哪一區()
A 堆區
B 堆疊區
C 全域區
D 方法區
決議:
方法當然在發放區啦,就像你的女朋友難道我拉她的手嗎,道理一樣的,選D
6:
不考慮反射,關于私有訪問控制符 private 修飾的成員變數,以下說法正確的是()
A 可以三種類所參考:該類自身、與它在同一包中的其他類,在其他包中的該類的子類
B 可以被兩種類訪問和參考:該類本身、該類的所有子類
C 只能被該類自身所訪問和修改
D 只能被同一個包中的類訪問
決議:給大家一張圖,直接看明白訪問權限,從public開始逐次減小,知道private私有的,只能給自己的類使用,選C

7:
Math.round(11.5) 等于多少 (). Math.round(-11.5) 等于多少 ( ).
A 11 ,-11
B 11 ,-12
C 12 ,-11
D 12 ,-12
決議:這是數學函式,這道題想考這個方法是向上取整還是向下取整,對于正數來說是向上取整,對于負數來說就是向下取整,選C
8:
假設 A 類有如下定義,設 a 是 A 類的一個實體,下列陳述句呼叫哪個是錯誤的?()
public class A
{
public int i;
static String s;
void method1(){}
static void method2(){}
}
A System.out.println(a.i);
B a.method1();
C A.method1();
D A.method2();
決議:通過一個實體物件來訪問類的成員變數是可以的,通過實體變數呼叫方法也是可以的,但是通過類名去呼叫非靜態方法是不可行的,當我想要這樣做的時候編輯器就會警告,不是非靜態的方法不能被一個靜態的背景關系呼叫,
但是D就是可行的,因為method2()是靜態方法,選C

二、編程題
2.1組隊競賽
題目鏈接:組隊競賽
牛牛舉辦了一次編程比賽,參加比賽的有3*n個選手,每個選手都有一個水平值a_i.現在要將這些選手進行組隊,一共組成n個隊伍,即每個隊伍3人.牛牛發現隊伍的水平值等于該隊伍隊員中第二高水平值,
例如:
一個隊伍三個隊員的水平值分別是3,3,3.那么隊伍的水平值是3
一個隊伍三個隊員的水平值分別是3,2,3.那么隊伍的水平值是3
一個隊伍三個隊員的水平值分別是1,5,2.那么隊伍的水平值是2
為了讓比賽更有看點,牛牛想安排隊伍使所有隊伍的水平值總和最大,
如樣例所示:
如果牛牛把6個隊員劃分到兩個隊伍
如果方案為:
team1:{1,2,5}, team2:{5,5,8}, 這時候水平值總和為7.
而如果方案為:
team1:{2,5,8}, team2:{1,5,5}, 這時候水平值總和為10.
沒有比總和為10更大的方案,所以輸出10.
輸入描述:
輸入的第一行為一個正整數n(1 ≤ n ≤ 10^5)
第二行包括3*n個整數a_i(1 ≤ a_i ≤ 10^9),表示每個參賽選手的水平值.
輸出描述:
輸出一個整數表示所有隊伍的水平值總和最大值.
示例1
輸入
2
5 2 8 5 1 5
輸出
10
解題思路:要想讓隊伍的水平總和最大值.最大,不妨先將陣列排序試試看,我們就舉上面的例子1,2,5,5,5,8,我們要保證的就是每組第二大的數最大即可,最后求和也是這個數累加和,第二大數的關系公式arr[arr.length-2*(i+1)],
代碼實作:
class Main{
public static void main(String []args){
Scanner scaner=new Scanner(System.in);
int n=scaner.nextInt();
int arr[]=new int [n*3];
for(int i=0;i<3*n;i++){
arr[i]=scaner.nextInt();
}
Arrays.sort(arr);
long sum=0;
for(int i=0;i<n;i++){
sum+=arr[arr.length-2*(i+1)];
}
System.out.print(sum);
}
2.2洗掉公共字符
題目鏈接:洗掉公共字符
輸入兩個字串,從第一字串中洗掉第二個字串中所有的字符,例如,輸入”They are students.”和”aeiou”,則洗掉之后的第一個字串變成”Thy r stdnts.”
輸入描述:
每個測驗輸入包含2個字串
輸出描述:
輸出洗掉后的字串
示例1
輸入:
They are students.
aeiou
輸出:
Thy r stdnts.
解題思路:
這道題很簡單,我們用哈希表遍歷aeiou,并存入,再使用一個字串ret遍歷They are students. 如果表中沒有They are students. 的字符就添加進去,最后列印ret即可,
import java.util.*;
public class Main{
public static void main (String[] args) {
Scanner scanner=new Scanner (System.in);
String str1=scanner.nextLine ();
String str2=scanner.nextLine ();
HashMap<Character,Integer> hashMap=new HashMap<> ();
for (int i = 0 ; i <str2.length () ; i++) {
if(hashMap.get (str2.charAt (i))==null){
//如果沒有就放到表里面
hashMap.put (str2.charAt (i), 1);
}else {
//已經存在就計數+1
hashMap.put (str2.charAt (i), hashMap.get (str2.charAt (i))+1);
}
}
String ret="";
for (int i = 0 ; i <str1.length () ; i++) {
if(hashMap.get (str1.charAt (i))==null){
ret+=str1.charAt (i);
}
}
System.out.println (ret);
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/316590.html
標籤:java
下一篇:cgb2108-day10
