1. 程式人生 > 其它 >2019 復旦大學工研院上機題-計算通訊代價

2019 復旦大學工研院上機題-計算通訊代價

技術標籤:復旦機試題演算法

題目:
給出一個樹,計算每個節點到其他節點的通訊代價的總和,假如樹為
1————2————3
1
則結點 1,2,3 通訊代價分別為:3,2,3
例:
輸入:
3
1 2
2 3
輸出:
3 2 3
輸入說明: 3,表示共有 3 個結點,接下來的兩行,表示該樹節點之間的相連情

  1. 思路分析
    輸入n,表示有n個數字,儲存到一個數組中,觀察不為0的點,即可知道是哪幾個位置,然後計算兩兩差值的和,即為該點的輸出值
    注意輸入的個數是有規律的
    主要是計算兩兩差值的絕對值的和
  2. 完整程式碼
#include<iostream>
#include<cmath>
using namespace std; int main(){ int n; cin>>n; int i,j; int b[20]={0}; for(i=1;i<=2*(n-1);i++){ //規律,n個數有2(n-1)個輸入 int t; cin>>t; b[t]++; } int cnt=0; //記錄輸出個數 for(i=1;i<20;i++){ int sum=0; //記錄某點到其他各點的距離和 if(b[i]){ for(j=1;j<20;j++){ if(b[j]) sum+=abs(j-i)
; } cnt++; cout<<sum; if(cnt!=n) cout<<" "; } } return 0; }
  • 除了給的測試用例,還可以試一下下面的,執行正確
    在這裡插入圖片描述