Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

โปรแกรม C++ เลือกตัวเลขบางส่วนที่ไม่มีสับเซตผลรวมเท่ากับ k

สมมติว่าเรามีตัวเลขสองตัว n และ k เราต้องเลือกจำนวนสูงสุดขององค์ประกอบที่แตกต่างกันจาก 1 ถึง n โดยที่ไม่มีสับเซต (subset) ใดที่ผลรวมเท่ากับ k หากพบ ให้คืนค่าตัวเลขที่เลือก

เช่น ถ้าค่าที่ป้อนเข้าเป็น n = 5; k = 3 ผลลัพธ์จะได้ [4, 5, 2]

ขั้นตอนการแก้ปัญหา

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนดังนี้:

สำหรับ i := (k + 1) / 2 เมื่อ i <= k - 1 เพิ่ม i ทีละ 1 ทำ:    พิมพ์ i สำหรับ i := k + 1 เมื่อ i <= n เพิ่ม i ทีละ 1 ทำ:    พิมพ์ i

ตัวอย่างโค้ด

ดูการนำไปใช้จริงด้านล่างเพื่อความเข้าใจที่ดียิ่งขึ้น:

#include <bits/stdc++.h> using namespace std; void solve(int n, int k) {    for (int i = (k + 1) / 2; i <= k - 1; i++) {       cout << i << ", ";    }    for (int i = k + 1; i <= n; i++) {       cout << i << ", ";    } } int main() {    int n = 5;    int k = 3;    solve(n, k); }

ข้อมูลนำเข้า

5, 3

ข้อมูลส่งออก

2, 4, 5,