- 相關(guān)推薦
攜程在線測(cè)試題答案
試題一:
乘積最大:
嘗試不同的拆分方法,dp求解或者找規(guī)律
示例代碼:
#include
#include
#include
#include
#define maxn 109
using namespace std;
long long dp[maxn][maxn];
int solve(int n){
long long ans = 0;
for(int i = 0; i <= n; i++)
ans = max(ans, dp[n][i]);
return ans;
}
int main(){
int n;
cin >> n;
for(int i = 0; i <= n; i++)
dp[0][i] = 1;
for(int i = 1; i <= n; i++){
for(int j = 1; j <= i; j++){
for(int k = 0 ; k < j; k++)
dp[i][j] = max(dp[i][j], dp[i - j][k] * j);
}
}
cout << solve(n) << endl;
return 0;
}
拼圖:
經(jīng)典問(wèn)題,廣度優(yōu)先搜索
示例代碼:
import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;
import java.util.Scanner;
import java.util.Set;
import java.util.HashSet;
import java.util.ArrayList;
import java.lang.StringBuilder;
public class Main{
public static String destNumbers = "123456780";
public static Set set = new HashSet();
public static int[]moveTable = new int[]{12,14,10,13,15,11,5,7,3};
public static ArrayList getNextMoveList(Node pNode){
int position = pNode.numbers.indexOf("0");
int moveStatus = moveTable[position];
ArrayList cNodes = new ArrayList();
for(int status=1; status <=8; status=status<<1){
if((moveStatus & status) > 0){
char[] charNumbers = pNode.numbers.toCharArray();
int switchPosition = 0;
if(status == 1){
switchPosition = position - 3;
} else if(status == 2){
switchPosition = position - 1;
} else if(status == 4){
switchPosition = position + 1;
} else if(status == 8){
switchPosition = position + 3;
}
charNumbers[position] = charNumbers[switchPosition];
charNumbers[switchPosition] = '0';
String s = String.valueOf(charNumbers);
if(!set.contains(Integer.valueOf(s))){
set.add(Integer.valueOf(s));
Node n = new Node(pNode, s, charNumbers[position]);
cNodes.add(n);
}
}
}
return cNodes;
}
static int getResult(Node node){
String result = "";
while(node.parentNode != null){
result += node.currentNum;
node = node.parentNode;
}
return new StringBuffer(result).reverse().toString().length();
}
static int run(String numbers){
if(numbers.equals(destNumbers)){
return 0;
}
ArrayList numsList = new ArrayList();
numsList.add(new Node(null, numbers, ' '));
while(numsList.size() > 0){
ArrayList tmpList = new ArrayList();
for(Node pNode : numsList){
ArrayList cNodes = getNextMoveList(pNode);
for(Node cNode : cNodes){
if(cNode.numbers.equals(destNumbers)){
return getResult(cNode);
}
tmpList.add(cNode);
}
}
numsList = tmpList;
}
return -1;
}
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String numbers = new String();
for(int rows=3; rows>0; rows--){
for(String n: scan.nextLine().split(" ")){
numbers += n;
}
}
int res = run(numbers);
System.out.println(String.valueOf(res));
}
}
class Node {
public Node(Node parentNode, String numbers, char currentNum){
this.numbers = numbers;
this.currentNum = currentNum;
this.parentNode = parentNode;
}
public char currentNum;
public String numbers;
public Node parentNode;
}
股票交易:
掃描序列,按照題意判斷冷卻時(shí)間,然后更新答案
示例代碼:
#include
#include
#include
#include
using namespace std;
int a[1000006],dp[1000006];
int main(){
int n,k;
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
scanf("%d",&k);
int cur=-1000000000, ans=0;
for(int i=1;i<=n;i++)
{
dp[i]=max(a[i]+cur, dp[i-1]);
if(i>=k)
cur=max(cur, dp[i-k]-a[i]);
else
cur=max(cur, -a[i]);
ans=max(ans, dp[i]);
}
printf("%d\n",ans);
}
試題二:
public class Base
{
private String baseName = "base";
public Base()
{
callName();
}
public void callName()
{
System. out. println(baseName);
}
static class Sub extends Base
{
private String baseName = "sub";
public void callName()
{
System. out. println (baseName) ;
}
}
public static void main(String[] args)
{
Base b = new Sub();
}
}
求這段程序的輸出。
來(lái)自 未老莫還鄉(xiāng) 的評(píng)論:
【不要在構(gòu)造器里調(diào)用可能被重載的虛方法,這是極度危險(xiǎn)的】。構(gòu)造器的初始化順序大概是 父類(lèi)靜態(tài)塊 子類(lèi)靜態(tài)塊 父類(lèi)初始化語(yǔ)句 父類(lèi)構(gòu)造函器 子類(lèi)初始化語(yǔ)句 子類(lèi)構(gòu)造器。父類(lèi)構(gòu)造器執(zhí)行的時(shí)候,調(diào)用了子類(lèi)的重載方法,然而子類(lèi)的類(lèi)字段還在剛初始化的階段,剛完成內(nèi)存布局,只能輸出null。
來(lái)自 ihuning 的精華評(píng)論:
看我大師歸來(lái):
1. Base b = new Sub();
2. Base b = 直接忽略,從 new Sub();開(kāi)始
3. 類(lèi)加載器加載 Base,Sub 類(lèi)到j(luò)vm;
4. 為Base,Sub 類(lèi)中的兩個(gè)屬性baseName 分配存儲(chǔ)空間,但是不初始化;
注意:屬性的初始化時(shí)放在構(gòu)造器中,按照代碼順序執(zhí)行的。
5. new Sub會(huì)調(diào)用Sub的無(wú)參構(gòu)造器,而在這個(gè)構(gòu)造器中會(huì)隱式調(diào)用父類(lèi)Base的無(wú)參構(gòu)造器;
6. 父類(lèi)Base的構(gòu)造器中代碼本質(zhì)是
public Base()
{
baseName = "base";
callName();
}
即父類(lèi)的屬性baseName 的值為base。但為何輸出null,騷年別急。
7. 因?yàn)楦割?lèi)構(gòu)造器方法是在子類(lèi)中調(diào)用的,即大環(huán)境是子類(lèi)。此時(shí),調(diào)用的方法callName()當(dāng)然是指子類(lèi)的方法。而這個(gè)方法打印的屬性baseName當(dāng)然也是子類(lèi)的。那現(xiàn)在子類(lèi)的屬性baseName的值是多少呢?答案是null.因?yàn)榇藭r(shí)子類(lèi)Sub的構(gòu)造器內(nèi)代碼本質(zhì)是:
super();
baseName="sub";
此時(shí)baseName="sub"還沒(méi)執(zhí)行。
因此,左后的值當(dāng)然是null.
【攜程在線測(cè)試題答案】相關(guān)文章:
iq測(cè)試題及答案02-24
智力測(cè)試題及答案06-12
智商測(cè)試題及答案10-02
情商測(cè)試題及答案02-24
愛(ài)情測(cè)試題及答案02-24
eq測(cè)試題及答案02-24
行政能力測(cè)試題及答案02-24
心理測(cè)試題目及答案02-24
iq智商測(cè)試題及答案10-19