游戏算法题-最长字串

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/iceSony/article/details/82623278

问题描述:

代码如下:

#include<iostream>
using namespace std;



void QuickSort(int* t,int* r, int start, int end)
{
	if (start >= end) return;
	int s = start;
	int e = end;
	int num = t[start];
	int num2 = r[start];
	while (start < end)
	{
		while (t[end] > num && end > start)	 end--;
		while (t[start] <= num && start < end)  start++;
		int x = t[start];
		t[start] = t[end];
		t[end] = x;
		int y = r[start];
		r[start] = r[end];
		r[end] = y;
	}
	t[s] = t[start];
	t[start] = num;
	r[s] = r[start];
	r[start] = num2;
	QuickSort(t,r, s, start - 1);
	QuickSort(t,r, end + 1, e);
}

int main()
{

	int n, num;
	int index = 0;
	scanf("%d", &n);
	int* t = new int[n];
	memset(t, -1, sizeof(int)*n);
	int* r = new int[n];
	memset(r, 0, sizeof(int)*n);
	int count = 0;
	int* q = new int[n];
	while (index < n&&scanf("%d", &num))
	{
		q[index] = num;
		index++;
		for (int i = 0; i < n; i++)
		{
			if (t[i] == -1)
			{
				t[i] = num;
				r[i] = r[i] + 1;
				count++;
				break;
			}
			if (t[i] == num)
			{
				r[i] = r[i] + 1;
				break;
			}
		}
	}
	QuickSort(t, r, 0, count - 1);
	int max = r[0];
	int num1=0, num2=0;
	for (int i = 0; i < count; i++)
	{
		int total = 0;
		total = r[i];
		if ((i + 1 < count) && (t[i + 1] - t[i])<=1)	total += r[i + 1];
		if (total > max) 
		{ 
			max = total; 
			num1 = t[i];
			if ((i + 1 < count) && (t[i + 1] - t[i]) <= 1) num2 = t[i + 1];
			else num2 = num1;
		}
	}
	for (int i = 0; i < n; i++)
	{
		if(q[i]== num1||q[i] == num2)
		cout << q[i] << endl;
	}
	printf("最长字符串个数为%d\n", max);
	return 0;
}

猜你喜欢

转载自blog.csdn.net/iceSony/article/details/82623278
今日推荐