Problem:
未提出者は誰だ

問題

JOI大学のM教授はプログラミングの授業を担当している．クラスには30人の受講生がいて各受講生には1番から30番までの出席番号がふられている．この授業の課題を28人の学生が提出した．提出した28人の出席番号から提出していない2人の出席番号を求めるプログラムを作成せよ．

入力

入力は28行あり，各行には提出者の出席番号（1以上30以下）が1つずつ書かれている．入力される出席番号に重複はないが，どのような順に入力されるかはわからない．

出力

出力は2行からなる． 1行目に2人の未提出者の出席番号のうち小さいほうを， 2行目に大きいほうを出力せよ．

入出力例

入力例 1

3
1
4
5
7
9
6
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

出力例 1

2
8

入力例 2

9
30
6
12
10
20
21
11
7
5
28
4
18
29
17
19
27
13
16
26
14
23
22
15
3
1
24
25

出力例 2

2
8

上記問題文と自動審判に使われるデータは、情報オリンピック日本委員会が作成し公開している問題文と採点用テストデータです。

Solution in C# (judge verdict: Accepted)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace _0511
{
    public class Program

    {
        public static void Main(string[] args)
        {
            bool[] studens = new bool[30];
            for (int i = 0 ; i < 28 ; i++)
            {
                studens[ReadInt() - 1] = true;
            }

            for (int i = 0 ; i < studens.Count() ; i++)
            {
                if(!studens[i]) Console.WriteLine(i + 1);
            }            
        }

        static string ReadSt() { return Console.ReadLine(); }
        static int ReadInt() { return int.Parse(Console.ReadLine()); }
        static long ReadLong() { return long.Parse(Console.ReadLine()); }
        static double ReadDouble() { return double.Parse(Console.ReadLine()); }
        static string[] ReadStAr(char sep = ' ') { return Console.ReadLine().Split(sep); }
        static int[] ReadIntAr(char sep = ' ') { return Array.ConvertAll(Console.ReadLine().Split(sep), e => int.Parse(e)); }
        static long[] ReadLongAr(char sep = ' ') { return Array.ConvertAll(Console.ReadLine().Split(sep), e => long.Parse(e)); }
        static double[] ReadDoubleAr(char sep = ' ') { return Array.ConvertAll(Console.ReadLine().Split(sep), e => double.Parse(e)); }
        static string WriteAr(int[] array, string sep = " ") { return String.Join(sep, array.Select(x => x.ToString()).ToArray()); }
        static string WriteAr(double[] array, string sep = " ") { return String.Join(sep, array.Select(x => x.ToString()).ToArray()); }
        static string WriteAr(long[] array, string sep = " ") { return String.Join(sep, array.Select(x => x.ToString()).ToArray()); }

    }

}