Blue Bridge Cup der vorherigen Fragen Fragen falsche Noten

Blue Bridge Cup der vorherigen Fragen Fragen falsche Noten

Hier hat Bild einfügen Beschreibung
Hier hat Bild einfügen Beschreibung
Ich denke , das Thema ist zu viel Mühe, er für jede Reihe von Dateneingabe, nicht eine Nummer geben n von Eingangsdaten, so im Wesentlichen vor , ist das Problem des Lesens zu lösen, können Sie nur die Zeichenfolge jeder Zeile lesen, und dann in digitale Zeichenfolge in das Array. Nach gespeichert, eine Art sein, die wiederum durchlaufen.
Daher wird das Problem in die Leitung einer Ziffernfolge in Frage umgewandelt. Und wir am Ende in ein digitales Zeichen ist ein Raum, oder bis zum Ende gelesen. Wenn wir also einen Raum lesen oder lesen, eine Datenumwandlung abgeschlossen ist, wird es in ein Array gedrückt werden.
Nachdem alle Daten verarbeitet wurden, wird das Array sortieren, können die Ergebnisse erhalten werden.

#include <iostream>
using namespace std;
#include <string>
#include <vector>
#include <algorithm>
vector<int> a;
int main()
{
	int n, i, j, num = 0, m, e;//n->行数,m->断号ID,n->重号ID
	string b;//读入的字符串
	cin >> n;
	getchar();//将输入的n后面的回车读掉
	for (i = 0 ; i < n ; i++)
	{
		getline(cin, b);//读入一行的字符串
		for (j = 0 ; j < b.length() ; j++)
		{
			if(b[j] >= '0' && b[j] <= '9')//若读到数字,则进行一个持续的转化
			{
				num = num * 10 + b[j] - '0';
			}
			if (b[j] == ' ' || j == b.length() - 1)//若读到空格,或者读至结尾处,则一个数字读完,将其压入数组
			{
				a.push_back(num);
				num = 0;//别忘记将num重置为0了哦
			}
		}
	}
	sort(a.begin(), a.end());//排序
	for (i = 1 ; i < a.size() ; i++)
	{
		if (a[i] == a[i - 1])
		{
			e = a[i];
		}
		else if (a[i] != a[i - 1] + 1)//这一步放在a[i] == a[i - 1]这个条件后面,因为该条件也满足两数字相等。并且需要用一个else if而不是if,不然容易判断出两数相等,而将数字储存错误
		{
			m = a[i - 1] + 1;
		}
	}
	cout << m << " " << e;
	return 0;
}

Wenn ein Fehler oder eine bessere Art und Weise, Punkt aus Ärger! Danke

Ich denke du magst

Origin blog.csdn.net/qq_44410340/article/details/104929090
Empfohlen
Rangfolge