fork download
  1. #include <stdio.h>
  2.  
  3. // ฟังก์ชันช่วยในการหาว่ามูลค่ารวมเท่ากันได้หรือไม่
  4. int find_combination(int values[], int n, int sum, int used[]) {
  5. for (int i = 0; i < n; i++) {
  6. for (int j = i + 1; j < n; j++) {
  7. if (!used[i] && !used[j] && values[i] + values[j] == sum) {
  8. // เจอคู่ที่มีมูลค่ารวมเท่ากับ sum
  9. used[i] = 1; // ทำเครื่องหมายว่าใช้ชิ้นนี้แล้ว
  10. used[j] = 1;
  11. printf("สมบัติชิ้นที่ %d และ %d มูลค่ารวม %d\n", i+1, j+1, sum);
  12. return 1;
  13. }
  14. }
  15. }
  16. return 0;
  17. }
  18.  
  19. int main() {
  20. int values[6];
  21. int total_sum = 0;
  22.  
  23. // รับค่าอินพุตของสมบัติ
  24. printf("กรุณาใส่มูลค่าของสมบัติทั้ง 6 ชิ้น (เช่น 1 2 3 4 5 6): ");
  25. for (int i = 0; i < 6; i++) {
  26. scanf("%d", &values[i]);
  27. total_sum += values[i];
  28. }
  29.  
  30. // ตรวจสอบว่ามูลค่ารวมต้องหาร 3 ลงตัว
  31. if (total_sum % 3 != 0) {
  32. printf("ไม่สามารถแบ่งสมบัติให้ยุติธรรมได้ เนื่องจากมูลค่ารวมไม่ลงตัวกับ 3\n");
  33. return 1;
  34. }
  35.  
  36. int target_sum = total_sum / 3; // มูลค่าที่แต่ละคนต้องได้
  37. int used[6] = {0}; // ตัวบ่งบอกว่าสมบัติชิ้นไหนถูกใช้แล้ว
  38.  
  39. printf("เป้าหมายในการแบ่งมูลค่าให้แต่ละคน = %d\n", target_sum);
  40.  
  41. // หาและแบ่งสมบัติสำหรับทายาทแต่ละคน
  42. for (int heir = 1; heir <= 3; heir++) {
  43. printf("ทายาทคนที่ %d ได้รับ: ", heir);
  44. if (!find_combination(values, 6, target_sum, used)) {
  45. printf("ไม่สามารถแบ่งสมบัติให้ยุติธรรมได้\n");
  46. return 1;
  47. }
  48. }
  49.  
  50. return 0;
  51. }
Success #stdin #stdout 0s 5280KB
stdin
10 30 70 90 20 80
stdout
กรุณาใส่มูลค่าของสมบัติทั้ง 6 ชิ้น (เช่น 1 2 3 4 5 6): เป้าหมายในการแบ่งมูลค่าให้แต่ละคน = 100
ทายาทคนที่ 1 ได้รับ: สมบัติชิ้นที่ 1 และ 4 มูลค่ารวม 100
ทายาทคนที่ 2 ได้รับ: สมบัติชิ้นที่ 2 และ 3 มูลค่ารวม 100
ทายาทคนที่ 3 ได้รับ: สมบัติชิ้นที่ 5 และ 6 มูลค่ารวม 100