Seven Dwarves

0013

Statement

โจทย์สามารถสรุปใจความได้ว่า มีจำนวนเต็ม 99 ตัว ในที่นี้จะเรียกว่า a1,a2,...,a9a_1, a_2, ..., a_9 ให้แสดงจำนวนเต็ม 77 ตัวใน 99 ตัวนี้ที่ผลรวมเป็น 100100 ตามลำดับข้อมูลนำเข้า

Solution

ถ้ามีจำนวนเต็ม 77 ตัวที่มีผลรวมเป็น 100100 (โจทย์รับประกันว่ามีเสมอ) แสดงว่าจะมีผลรวมของเลข 22 ตัวที่ไม่เข้าพวก

กล่าวคือเราสามารถหาคำตอบของโจทย์ได้จากการหาจำนวนเต็ม aia_i และ aja_j ที่ iji \neq j และ 1i,j91 \leq i, j \leq 9 ที่ทำให้ (i=19ai)100=ai+aj(\sum_{i = 1}^{9}{a_i}) - 100 = a_i + a_j

จากเงื่อนไขข้างต้นสามารถเขียนโปรแกรมได้โดยการวนลูปสองชั้นเพื่อหาเลขตำแหน่งที่ ii และ jj ที่สอดคล้องกับเงื่อนไข

Code

#include <stdio.h>

int main() {
  int a[10], sum = 0;
  for (int i = 1; i <= 9; i++) {
    scanf("%d", &a[i]);
    sum += a[i];
  }

  for (int i = 1; i <= 9; i++) {
    for (int j = i + 1; j <= 9; j++) {
      if (sum - 100 == a[i] + a[j]) {
        // ถ้าเข้าเงื่อนไขนี้มาได้แสดงว่าเจอตำแหน่งที่ไม่ต้องปริ้นแล้วคือค่าของ j กับ k
        for (int k = 1; k <= 9; ++k) {
          if (k == i || k == j) {
            // เช็คว่าตำแหน่งที่ k คือตำแหน่ง i หรือ j ก็ข้ามรอบไป ไม่ต้องปริ้นอะไร
            continue;
          }
          printf("%d\n", a[k]);
        }

        // หลังจากปริ้นแล้วก็จบโปรแกรม
        return 0;
      }
    }
  }
  return 0;
}