ในบทช่วยสอนนี้ เราจะเขียนโปรแกรมเพื่อหาค่าน้อยที่สุดลำดับที่ k หลังจากลบจำนวนเต็มบางส่วนออกจากจำนวนธรรมชาติ
เราได้รับอาร์เรย์ขององค์ประกอบและค่า k ให้ลบองค์ประกอบทั้งหมดออกจากจำนวนธรรมชาติสำหรับองค์ประกอบที่อยู่ในอาร์เรย์ที่กำหนด แล้วหาค่าน้อยที่สุดลำดับที่ k จากจำนวนธรรมชาตที่เหลือ
ขั้นตอนการแก้ปัญหา
- กำหนดค่าเริ่มต้นของอาร์เรย์และ k
- กำหนดอาร์เรย์และตั้งค่าองค์ประกอบทั้งหมดเป็น 0 ยกเว้นองค์ประกอบที่อยู่ในอาร์เรย์ที่กำหนด
- เขียนลูปที่วนจนถึงขนาดของอาร์เรย์ที่กำหนด
- ลดค่า k ลงถ้าองค์ประกอบปัจจุบันไม่อยู่ในอาร์เรย์ด้านบน
- คืนค่าปัจจุบันเมื่อ k กลายเป็นศูนย์
- คืนค่า 0
ตัวอย่างโค้ด
#include <bits/stdc++.h>
#define MAX 1000000
using namespace std;
int smallestNumber(int arr[], int n, int k) {
int flag[MAX];
memset(flag, 0, sizeof flag);
for (int i = 0; i < n; i++) {
flag[arr[i]] = 1;
}
for (int i = 1; i < MAX; i++) {
if (flag[i] != 1) {
k--;
}
if (!k) {
return i;
}
}
return 0;
}
int main() {
int k = 2;
int arr[] = { 3, 5 };
cout << smallestNumber(arr, 2, k) << endl;
return 0;
}
ผลลัพธ์
หากรันโค้ดด้านบน จะได้ผลลัพธ์ดังนี้:
2
สรุป
หากมีข้อสงสัยเกี่ยวกับบทช่วยสอนนี้ สามารถถามได้ในส่วนความคิดเห็น