歴代の試験問題の誤った手形.


歴代の試験問題の誤った手形.
ある秘密関係部門はある手形を発行し、年末にすべて回収しなければならない.各手形には一意のID番号があります.年間全手形のID番号は連続していますが、IDの開始番号はランダムに選択されています.スタッフの不注意により、ID番号の入力中にエラーが発生し、あるIDが切れ、もう一つのIDが重複しました.あなたの任務はプログラミングを通じて、ブレーク番号のIDと重い番号のIDを見つけることです.最大サイズと最小サイズでは、ブレーク番号が発生しないと仮定します.
入力形式:
要求プログラムは、まず、後のデータ行数を表す整数N(N<100)を入力する.次にN行データを読み込む.各行のデータ長は等しくなく、スペースで区切られた複数(100個未満)の正の整数(100000以下)です.行内と行末に余分なスペースがある可能性があります.プログラムでは、これらのスペースを処理する必要があります.各整数はID番号を表します.
出力フォーマット:
プログラムは1行を出力し、2つの整数m nを含み、スペースで区切る必要がある.
但し、mはブレークID、nは重ID
入力サンプル1:
ここに入力のセットを示します.例:
2
5 6 8 11 9 
10 12 9

出力サンプル1:
ここでは、対応する出力が与えられます.例:
7 9

入力サンプル2:
ここに入力のセットを示します.例:
6
164 178 108 109 180 155 141 159 104 182 179 118 137 184 115 124 125 129 168 196
172 189 127 107 112 192 103 131 133 169 158 
128 102 110 148 139 157 140 195 197
185 152 135 106 123 173 122 136 174 191 145 116 151 143 175 120 161 134 162 190
149 138 142 146 199 126 165 156 153 193 144 166 170 121 171 132 101 194 187 188
113 130 176 154 177 120 117 150 114 183 186 181 100 163 160 167 147 198 111 119

出力サンプル2:
ここでは、対応する出力が与えられます.例:
105 120

考え方:
まず、各行の文字列をスペースで区切って(文字ストリームで区切ったほうが便利)、新しい配列arr(分割されたstringタイプをintに変換しstoi関数で実現可能)を格納し、この配列を並べ替え、現在のiとi+1の数差が2であればn=arr[i]+1、等しければm=arr[i]とする.
コード:
#include
#include
#include
#include
#include
using namespace std;
int main()
{
	int N,m,n;
	string s,t;
	vector<int>arr;
	cin >> N;
	getchar();
	for (int i = 0; i < N; i++)
	{
		getline(cin, s);
		stringstream ss;
		ss << s;
		while (ss >> t)
		{
			arr.push_back(stoi(t));//          int  arr
		}
	}
	sort(arr.begin(), arr.end());
	for (int i = 0; i < arr.size() - 1; i++)
	{
		if (arr[i + 1] - arr[i] == 2)
			m = arr[i] + 1;
		if (arr[i] == arr[i + 1])
			n = arr[i];
	}
	cout << m << ' ' << n << endl;
    return 0;
}