ブルーブリッジカップ前の質問の質問が間違っノート

ブルーブリッジカップ前の質問の質問が間違っノート

ここに画像を挿入説明
ここに画像を挿入説明
私はこのトピックは、彼がデータ入力の行ごとに、あなただけの各行の文字列を読み、その後することができますので、本質的には、読書の問題を解決することであり、n個の入力データの数を与えていない、あまりにも多くの問題をだと思います配列へのデジタル文字列に。保存された後、並べ替えも、順番に横断します。
したがって、問題は、質問への数字列のラインに変換されます。そして、我々はデジタル符号に終わるスペースである、または最後までお読みください。我々はスペースまたは読み取りを読むときに、データ変換が完了すると、それが配列に押し込まれます。
すべてのデータが処理された後、配列をソートし、結果を得ることができます。

#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;
}

エラー、またはより良い方法であれば、トラブルアウトポイント!ありがとう

おすすめ

転載: blog.csdn.net/qq_44410340/article/details/104929090