Hướng dẫn giải của Tính toán sát thương
Chỉ dùng lời giải này khi không có ý tưởng, và đừng copy-paste code từ lời giải này. Hãy tôn trọng người ra đề và người viết lời giải.
Nộp một lời giải chính thức trước khi tự giải là một hành động có thể bị ban.
Nộp một lời giải chính thức trước khi tự giải là một hành động có thể bị ban.
Tác giả:
Sau khi đọc đề qua, bạn có thể thấy những dữ liệu trong bài có thể biến thành một dạng công thức tính như sau:
$$ Output = DMG \times \left\{ \begin{array}{l} \displaystyle \frac{{100}}{{100 + Armor}},\,\,\,\,\,\,\,\,\,\,\,Armor \ge 0\\ 2 - \displaystyle \frac{{100}}{{100 - Armor}},\,Armor < 0 \end{array} \right. $$
Và nhiệm vụ của bạn bây giờ là từ công thức này hãy viết ra chương trình tính.
Code:
C++
#include<bits/stdc++.h> using namespace std; long long pd,md; int pa,mr,t; long double opd, omd; signed main() { cin>>t; while(t--){ cin >> pd >> md >> pa >> mr; opd = pd * ((pa >= 0?((double) 100.0 / (100 + pa)):((double) (2.0 - (100.0 / (100 - pa)))))); omd = md * ((mr >= 0?((double) 100.0 / (100 + mr)):((double) (2.0 - (100.0 / (100 - mr)))))); cout << fixed << setprecision(6) << opd << " " << omd << "\n"; } }
Pascal
var pd,md: qword; pa,mr,t: integer; opd,omd: double; function calc(arm: double):double; begin if(arm < 0) then exit(2.0 - (100.0 / (100 - arm))) else exit(100.0 / (100 + arm)); end; begin readln(t); while(t <> 0) do begin readln(pd,md,pa,mr); opd := calc(pa) * pd; omd := calc(mr) * md; writeln(opd:0:6,#32,omd:0:6); dec(t); end; end.
Bình luận