สมมติว่าเรามีอาร์เรย์ A ที่มีองค์ประกอบ n ในการประกวดเขียนโค้ด นักเรียนทั้งหมด n คนจะเข้าร่วม และก่อนเริ่ม ทุกคนจะได้รับคะแนนเชิงบวก (จำนวนเต็ม) A[i] แสดงถึงการให้คะแนนของนักเรียน ith หลังจากการแข่งขันจบลง นักเรียนทุกคนจะได้ตำแหน่งจำนวนเต็มบวก เราคาดว่านักเรียนจะได้รับสถานที่ตามการจัดอันดับของพวกเขา หากนักเรียน A มีคะแนนต่ำกว่านักเรียน B อย่างเคร่งครัด A จะได้รับตำแหน่งที่มากกว่า B อย่างเคร่งครัด เราต้องหาตำแหน่งเมื่อสิ้นสุดการแข่งขัน
ดังนั้นหากอินพุตเป็น A =[3, 5, 3, 4, 5] ผลลัพธ์จะเป็น [4, 1, 4, 3, 1] เพราะนักเรียนที่ 2 และ 5 แบ่งปันตำแหน่งแรกที่มีคะแนนสูงสุด 4 นักเรียนอยู่ถัดจากตำแหน่งที่สาม นักเรียนที่ 1 และ 3 เป็นตำแหน่งที่สี่ร่วมกันสุดท้าย
ขั้นตอน
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
n := size of A for initialize i := 0, when i < n, update (increase i by 1), do: d := 1 for initialize j := 0, when j < n, update (increase j by 1), do: if A[j] > A[i], then: (increase d by 1) cout << d << ", "
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
#include <bits/stdc++.h>
using namespace std;
void solve(vector<int> A){
int n = A.size();
for (int i = 0; i < n; i++){
int d = 1;
for (int j = 0; j < n; j++){
if (A[j] > A[i])
d++;
}
cout << d << ", ";
}
}
int main(){
vector<int> A = { 3, 5, 3, 4, 5 };
solve(A);
} อินพุต
{ 3, 5, 3, 4, 5 } ผลลัพธ์
4, 1, 4, 3, 1,