記一次之前乙個遊戲大廠引擎組的面試,由於面試時間有限沒有答完這個題,在此做乙個記錄。
題目:給出多個 (x, y) 點組成的相連的線段(點的順序決定連線順序),以及乙個數字 n。返回一組 (x,y)將之前的相連線段平均分成 n 份長度相等的線段。
思路:(1)將所有的點集合所得到的匯流排段長度算出來。為了方便稱呼叫輸入的點組成的線叫原線。
(2)將總長度平分 n 份後算出每段平分的長度。
//由於第乙個 testcase 比較簡單,我又加了乙個 testcase2。通過 debug 模式證明是對的。neteaseenginesecondinterview.cpp : this file contains the 'main' function. program execution begins and ends there.
//#include
#include
#include
#define pi 3.1415926
using
namespace
std;
struct
point ;
float calculatesegmentlength(point& p1, point&p2)
//利用三角函式算出新的點
//p1, p2: 原線上兩點
//segmentlen: 原先線段上兩點
//targetlen: 新線段需要達到的長度
point createnewpoint(point& p1, point& p2, float
targetlen) ;
return
result;
}vector
segmentspliter(vector& input, int
n)
//平分長度
float newsegmentlength = length /n;
cout
<< "
new segment length =
"<< newsegmentlength <
int originsegmentindex = 0; //
原線段int originpointindex = 0; //
原線上點的索引
//使用 n-1 個點分割原線至 n 等分
while (result.size() < n - 1
) point newpoint = createnewpoint(input[originpointindex], input[originpointindex + 1
], nextsegmentlength);
result.push_back(newpoint);
//這裡進製原線點索引,因為下一次終點索引是這個指標開始的
originpointindex++;
}//若之前的新生成點集不為空的話,則以最後乙個新生成的點索引作為起點
else
point newpoint =createnewpoint(start, end, remainlength);
result.push_back(newpoint);}}
return
result;
}int
main()
; point p2 = ;
point p3 = ;
point p4 = ;
vector
test1;
point p5 = ;
point p6 = ;
point p7 = ;
point p8 = ;
point p9 = ;
vector
test2;
vector
ans1 =segmentspliter(test1, n);
for(point p : ans1)
vector
ans2 =segmentspliter(test2, n);
for(point p : ans2)
return0;
}
執行結果如下:
歡迎各位提供新的 testcase 或提供更好的解法,不勝感激。
平均分配演算法
平均分配有2種情況 1 都沒有記錄的時候,平均分配。若11個元素,4個cpu,則分配數量為 2,3,3,3 每次分配的起點終點表示區間為 list seqno taskcounters,list seqno 1 taskcounters 11個數,平均分給4個cpu header content t...
關於遞推平均分幾塊問題
幾和遞推 平均分幾塊問題中一般 二維的一般公式是 an 2 bn c,三維的一般公式是 an 3 bn 2 cn d.知道這個做均分問題特別快比如 適用於以下情況 1 n條直線最多分平面問題 題目大致如 n條直線,最多可以把平面分為多少個區域。析 可能你以前就見過這題目,這充其量是一道初中的思考題。...
Android 使得元件平均分布
在布局內使用如下 android layout weight 1 layout weight表示view分配到的額外的布局空間,可正可負。布局的時候,系統先按照view的layout width和layout height來布局,然後再根據layout weight對view的位置進行調整。參考01...