05:第二个重复出现的数
总时间限制: 1000ms 内存限制: 65536kB
描述
给定一个正整数数组(元素的值都大于零),输出数组中第二个重复出现的正整数,如果没有,则输出字符串"NOT EXIST"。
输入
第一行为整数m,表示有m组数据。
其后每组数据分两行:
第一行为正整数n(3 < n < 500),表示数组的长度;
第二行是n个正整数,正整数间用空格分开。
输出
有m行输出,每行输出对于数组中第二个重复出现的正整数,如果没有,则输出字符串"NOT EXIST"。
样例输入
5
10
1 3 5 7 9 7 8 5 2 6
10
1 3 5 5 7 9 7 8 2 6
10
1 3 5 5 7 9 4 8 2 6
10
1 3 5 7 2 9 9 8 7 5
10
1 3 5 2 7 9 9 8 7 5
样例输出
7
7
NOT EXIST
7
7
(我感觉题目有点问题,什么叫“组中第二个重复出现的正整数”,如果理解为第二次的那个重复的数的话,题目本身给的输出是有问题的,所以下面的程序还是按照这样来写)
#include "pch.h"
#include <iostream>
#include <math.h>
using namespace std;
int main()
{
int m = 0, array[100][500] = { 0 };
int out[100] = { 0 };
cin >> m;
//接收数据
for (int i = 0; i < m; i++)
{
cin >> array[i][0];
for (int j = 1; j <= array[i][0]; j++)
{
cin >> array[i][j];
}
}
// 找到数组中第二个重复的数字
for (int i = 0; i < m; i++)//每一组数据
{
int n = 0;
for (int j = 2; j <= array[i][0]; j++)//每组数据里的每一个数据
{
for (int k = 1; k < j; k++)//对该数据之前的数组进行对比,判断相等
{
if (array[i][j] == array[i][k])
{
n += 1;//判断第二次重复
if (n == 2)
{
out[i] = array[i][j];
j = array[i][0] + 1;
break;//直接跳出大循环
}
}
}
}
}
for (int i = 0; i < m; i++)
{
if (out[i]!=0)
{
cout << out[i] << endl;
}
else
{
cout << "NOT EXIST" << endl;
}
}
return 0;
}
刚开始写的时候希望在数据输入的时候就进行判断,使用标志符flag进行判断第二次,但是程序一直报错,且错误不唯一,所以就重新分开了写。感觉这样写有点复杂,容易出错误,但是目前自己找不到好的办法,以后有能力了看怎么写简单吧。