【Cousera】北京大学 | 计算导论与C语言基础习题_05:第二个重复出现的数

本文介绍了一种算法,用于从正整数数组中找出第二个重复出现的数,若不存在则返回特定字符串。通过逐层遍历和比较,实现对多组数据的有效处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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进行判断第二次,但是程序一直报错,且错误不唯一,所以就重新分开了写。感觉这样写有点复杂,容易出错误,但是目前自己找不到好的办法,以后有能力了看怎么写简单吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值