第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

大家可以試試看這個(gè)面試題,當(dāng)時(shí)給的時(shí)間是1小時(shí),當(dāng)時(shí)做完這題就可以進(jìn)入phone interview

大家可以試試看這個(gè)面試題,當(dāng)時(shí)給的時(shí)間是1小時(shí),當(dāng)時(shí)做完這題就可以進(jìn)入phone interview

四季花海 2023-04-29 21:17:22
題目如下:你有足夠數(shù)量的天秤和砝碼。每個(gè)天秤有10磅。天秤的左右兩邊可以放砝碼,也可以放天秤。題目要求是,在給定的初始組合情況下,如何添加砝碼,讓整體保證平衡。輸入是一串?dāng)?shù)字,第一行是一個(gè)整數(shù),代表當(dāng)前初始狀態(tài)一共有多少個(gè)天秤,每個(gè)天秤都有一個(gè)序號(hào)接下來往下,每?jī)尚蟹謩e代表一個(gè)天秤左右兩邊所包含的天秤序號(hào)和包含的砝碼重量每一組的格式如下:左半的砝碼重量 <天秤i,天秤j,...>右半的砝碼重量 <天秤k,天秤m,...>其中,<>表示數(shù)組輸入樣例如下:4 //4個(gè)天秤0 1 //0號(hào)天秤左邊放置著1號(hào)天秤0 2 //0號(hào)天秤右邊放置著2號(hào)天秤0  //1號(hào)天秤左邊啥都沒有0 3 //1號(hào)天秤右邊放置著3號(hào)天秤3  //2號(hào)天秤左邊有三磅重的砝碼0  //2號(hào)天秤右邊啥都沒有0  //3號(hào)天秤左邊啥都沒有0  //3號(hào)天秤右邊啥都沒有輸出,輸出N行。第i行代表第i個(gè)天秤的左右兩邊需要添加多少重量的砝碼輸出樣例如下:0: 0 141: 10 02: 0 33: 0 0大家可以試試看。當(dāng)時(shí)給我的時(shí)間是1小時(shí),當(dāng)時(shí)做完這題就可以進(jìn)入phone interview,可惜掛在了phone interview那- -。
查看完整描述

2 回答

?
BIG陽(yáng)

TA貢獻(xiàn)1859條經(jīng)驗(yàn) 獲得超6個(gè)贊

下面來簡(jiǎn)單的說一下思想:
針對(duì)input來看,其實(shí)就是有一棵或多棵現(xiàn)成的樹,目的就是把每個(gè)節(jié)點(diǎn)的左右兩個(gè)分支配平。
由于子節(jié)點(diǎn)的配平會(huì)影響到父節(jié)點(diǎn)的配平,所以很自然的就想到了用遞歸的方法來解這個(gè)問題。
整個(gè)遞歸過程就是一個(gè)樹的后序遍歷過程。

調(diào)整了代碼縮進(jìn),加入必要注釋

package PhoneInterview;import java.io.BufferedReader;import java.io.File;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.IOException;public class Balance {	// 每個(gè)天秤的屬性
	public boolean balanced = false;// 判斷是否已經(jīng)配平
	public int nodeID;// 天秤id
	public Balance[] leftChild = null;// 左子樹的天秤數(shù)組
	public Balance[] rightChild = null;// 右子樹的天秤數(shù)組
	public int balanceWeight = 10;// 自身重量
	public int leftWeight = 0;// 左子樹總重量
	public int rightWeight = 0;// 右子樹總重量
	public int adding = 0;// 為了配平,還需添加多少重量的砝碼

	// 遞歸函數(shù)
	public static int balancing(Balance node) {		// 判斷天秤左邊是否有子天秤
		if (node.leftChild != null) {			for (int i = 0; i < node.leftChild.length; i++)
				node.leftWeight += balancing(node.leftChild[i]);
		}		// 判斷天秤右邊是否有紫天秤
		if (node.rightChild != null) {			for (int i = 0; i < node.rightChild.length; i++) {
				node.rightWeight += balancing(node.rightChild[i]);
			}
		}		// 天秤左右子樹都計(jì)算完畢,來計(jì)算當(dāng)前天秤左右重量差
		node.adding = Math.abs(node.leftWeight - node.rightWeight);		// 標(biāo)記該天秤已經(jīng)配平
		node.balanced = true;		return node.balanceWeight + node.leftWeight + node.rightWeight
				+ node.adding;
	}	// 主函數(shù)
	public static void main(String[] args) {		int N = 0;
		Balance[] Balances;
		BufferedReader br;		try {			// 載入數(shù)據(jù),初始化過程,無視這個(gè)file name吧
			br = new BufferedReader(new FileReader("input00.txt"));			// load第一行,得到天秤總數(shù)
			String string = br.readLine();
			N = Integer.parseInt(string);			// 初始化Balances數(shù)組
			Balances = new Balance[N];			int i = 0;			for (int k = 0; k < N; k++) {
				Balances[k] = new Balance();
				Balances[k].nodeID = k;
			}			/*
			 * 開始一行一行的讀入數(shù)據(jù),每?jī)尚幸粋€(gè)循環(huán)
			 */
			while ((string = br.readLine()) != null) {				// 天秤左半部分初始化
				String[] strs = string.split(" ");
				Balances[i].leftWeight = Integer.parseInt(strs[0]);				/*
				 * 這里是根據(jù)數(shù)據(jù)格式來的 如果length超過1,那就代表除了自重的值以外 還有放置的子天秤
				 * 遂初始化子樹上的數(shù)組,添加對(duì)子天平的引用,方便日后調(diào)用
				 */
				if (strs.length != 1)
					Balances[i].leftChild = new Balance[strs.length - 1];				for (int j = 1; j < strs.length; j++) {
					Balances[i].leftChild[j - 1] = Balances[Integer
							.parseInt(strs[j])];
				}				// 天秤右半部分初始化
				string = br.readLine();
				String[] strs1 = string.split(" ");
				Balances[i].rightWeight = Integer.parseInt(strs1[0]);				// 同理左半部分的操作
				if (strs1.length != 1)
					Balances[i].rightChild = new Balance[strs1.length - 1];				for (int j = 1; j < strs1.length; j++) {
					Balances[i].rightChild[j - 1] = Balances[Integer
							.parseInt(strs1[j])];
				}
				i++;
			}			// 初始化完畢,開始配平
			for (i = 0; i < Balances.length; i++) {				if (!Balances[i].balanced)
					Balance.balancing(Balances[i]);
			}			// 輸出結(jié)果
			for (int m = 0; m < Balances.length; m++) {				if (Balances[m].leftWeight < Balances[m].rightWeight)
					System.out.println(m + ": " + Balances[m].adding + " 0");				else if (Balances[m].leftWeight >= Balances[m].rightWeight)
					System.out.println(m + ": 0 " + Balances[m].adding);
			}
		} catch (FileNotFoundException e) {			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}
}


查看完整回答
反對(duì) 回復(fù) 2023-05-02
?
倚天杖

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超3個(gè)贊

個(gè)人解法如下:

  • 假設(shè)天平之間沒有嵌套關(guān)系(即不會(huì)出現(xiàn)1在2左邊,2在1左邊這種情況)

  • 為了使一個(gè)天平平衡,首先得把放在其左邊或右邊的天平配平

  • 假設(shè)力矩為0,天平左右兩邊重量不等時(shí)在少的一邊用砝碼補(bǔ)上重量

如果符合以上,題目綜合性不錯(cuò),涉及了簡(jiǎn)單樹的遍歷以及貪心算法

下面是代碼(腦袋不好使?fàn)顟B(tài),不知道弄對(duì)了沒——反正代碼風(fēng)格成渣渣了)

import sys

def set_balance(id):
    if not balanced[id]:
        for i in lcld[id]:
            lw[id] += set_balance(i)
        for i in rcld[id]:
            rw[id] += set_balance(i)
    if lw[id] < rw[id]:
        ladd[id] = rw[id] - lw[id]
        lw[id] += ladd[id]
    elif lw[id] > rw[id]:
        radd[id] = lw[id] - rw[id]
        rw[id] += radd[id]
    balanced[id] = True
    return lw[id] + rw[id]n = int(sys.stdin.readline())
lw = [5 for i in range(n)]rw = [5 for i in range(n)]lcld = [[] for i in range(n)]rcld = [[] for i in range(n)]for i in range(n):
    row = [int(v) for v in sys.stdin.readline().split()]
    lw[i] += row[0]
    for v in row[1:]:
        lcld[i].append(v)
    row = [int(v) for v in sys.stdin.readline().split()]
    rw[i] += row[0]
    for v in row[1:]:
        rcld[i].append(v)

balanced = [False for i in range(n)]ladd = [0 for i in range(n)]radd = [0 for i in range(n)]for i in range(n):
    get_balance(i)
    
for i in xrange(n):
    print "%d:%d %d" % (i, ladd[i], radd[i])


查看完整回答
反對(duì) 回復(fù) 2023-05-02
  • 2 回答
  • 0 關(guān)注
  • 252 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)