如果一个数列中的某一段(至少有两个元素)的各元素值均相同,则称之为等值数列段。等值数列段中元素的个数叫做等值数列段的长度。
输入:
由N个元素组成的整数数列A(其中N<=50)
输出:
A中长度最大的所有等值数列段的始末位置,如果没有等值数列段,则输出No equal number list.
说明:
始末位置是指数组下标,即0表示第一个元素。
如果有多个同等长度的等值数列,只输出第一个等值数列的起始位置。即:当在一个LIST中出现两个等长的连续串时,答案应该是第一个等长串。
测试输入 | 期待的输出 | 时间限制 | 内存限制 | 额外进程 | |
---|---|---|---|---|---|
测试用例 1 | 以文本方式显示
| 以文本方式显示
| 1秒 | 64M | 0 |
测试用例 2 | 以文本方式显示
| 以文本方式显示
| 1秒 | 64M | 0 |
测试用例 3 | 以文本方式显示
| 以文本方式显示
| 1秒 | 64M | 0 |
测试用例 4 | 以文本方式显示
| 以文本方式显示
| 1秒 | 64M | 0 |
#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;
}