【数列】等值数列段

如果一个数列中的某一段(至少有两个元素)的各元素值均相同,则称之为等值数列段。等值数列段中元素的个数叫做等值数列段的长度。

输入:
        由N个元素组成的整数数列A(其中N<=50)

输出:
        A中长度最大的所有等值数列段的始末位置,如果没有等值数列段,则输出No equal number list.

说明:
        始末位置是指数组下标,即0表示第一个元素。
        如果有多个同等长度的等值数列,只输出第一个等值数列的起始位置。即:当在一个LIST中出现两个等长的连续串时,答案应该是第一个等长串。

测试输入期待的输出时间限制内存限制额外进程
测试用例 1以文本方式显示
  1. 5↵
  2. 1 2 3 4 5↵
以文本方式显示
  1. No equal number list.↵
1秒64M0
测试用例 2以文本方式显示
  1. 6↵
  2. 1 0 1 1 1 0↵
以文本方式显示
  1. The longest equal number list is from 2 to 4.↵
1秒64M0
测试用例 3以文本方式显示
  1. 10↵
  2. 1 1 1 0 1 1 1 1 1 1↵
以文本方式显示
  1. The longest equal number list is from 4 to 9.↵
1秒64M0
测试用例 4以文本方式显示
  1. 10↵
  2. 1 4 4 4 5 6 6 6 5 6↵
以文本方式显示
  1. The longest equal number list is from 1 to 3.↵
1秒64M0

#include <stdio.h>
#include <string.h>

int main() {
	int i, l, n, j = 1, u = 0, k = 0, p = 1, t_max, num; //j是长度,k判断有无相同数字
	char a[200] = {0}, b[200] = {0};
	scanf("%d\n", &n);
	gets(a);
	l = strlen (a);
	for (i = 0; i < l; i++) {
		if (a[i] != ' ')
			b[u++] = a[i];
	}
	l = strlen(b);
	for (i = 0; i < l - 1; i++) {
		if (b[i] == b[i + 1]) {
			k = 1, j++;
			if (i + 1 == l - 1) {//考虑最后两位数相等的情况
				if (j > t_max) {
					t_max = j, num = i + 1;
				}
			}
		}
		if (b[i] != b[i + 1] && k == 1 && p == 1) { //把第一次的j和i赋给t_max和num
			t_max = j, num = i, j = 1, p = 0;
		}
		if (b[i] != b[i + 1] && k == 1 && p == 0) { //后续若还有连续重复数字时进行的操作
			if (j > t_max) {
				t_max = j, num = i;
			}
			j = 1;
		}
	}
	if (k == 0)
		printf("No equal number list.\n");
	else {
		printf("The longest equal number list is from %d to %d.\n", num - t_max + 1, num);
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值