2019 復旦大學工研院上機題-計算通訊代價
阿新 • • 發佈:2021-02-11
題目:
給出一個樹,計算每個節點到其他節點的通訊代價的總和,假如樹為
1————2————3
1
則結點 1,2,3 通訊代價分別為:3,2,3
例:
輸入:
3
1 2
2 3
輸出:
3 2 3
輸入說明: 3,表示共有 3 個結點,接下來的兩行,表示該樹節點之間的相連情
況
- 思路分析
輸入n,表示有n個數字,儲存到一個數組中,觀察不為0的點,即可知道是哪幾個位置,然後計算兩兩差值的和,即為該點的輸出值
注意輸入的個數是有規律的
主要是計算兩兩差值的絕對值的和 - 完整程式碼
#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;
}
- 除了給的測試用例,還可以試一下下面的,執行正確