สมมติว่าเรามีอาร์เรย์ 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,