0

我在一个包含 10 个项目的数组中获得最长的连续递增数字

int list[] = {2,3,8,9,10,11,12,2,6,8};
int start_pos = 0;
int lenght=0; // lenght of the sub-~consetuve
for (int a =0; a <=9; a++ )
{

    if ((list[a]+1) == (list[a+1])) {
        // continue just the string;
        lenght++;
    } else {
        start_pos = a;
    }
}
cout << lenght  << " and start in " << start_pos;
getchar();

但它不起作用,它应该返回 length & start_pos ( 3 和 lenght 4 ),因为最长的增加是从 9 , 10 , 11 , 12 但它不起作用。

4

3 回答 3

0

我自己做的:

#include <iostream>

using namespace std;
bool cons(int list[] , int iv) { bool ret=true; for (int a=0; a<=iv; a++) { if (list[a] != list[a+1]-1) ret=false; } return ret; }

void main() {
int str[10] = {12,13,15,16,17,18,20,21};
int longest=0;
int pos=0;
for (int lenght=1; lenght <= 9; lenght++) {
    int li[10];
    for (int seek=0; seek <= 9; seek++) {
        for (int kor=0; kor <= lenght-1; kor ++ ) {
            li[kor] = str[seek+kor];
        }
        if (cons(li , lenght-2)) {
            longest = lenght;
            pos=seek;
        } 
    }
}

for (int b=pos; b <= pos+longest-1; b++) cout << str[b] << " - "; cout << "it is the end!" << endl; getchar();


}    
于 2012-05-09T07:36:10.633 回答
0

简单的想法:序列的起点、终点和长度。

运行循环 i

序列将在当前数字(在索引 i 处)小于下一个数字 1 => 起点集 = i 时开始

当条件高于 false => 获取终点 => 获取长度 = 结束 -start(使更多变量称为 max 以比较长度)=> 结果可能是最大值,重置起点,终点 = 0 序列结束时再次

于 2012-05-08T18:02:09.497 回答
0

假设您实际上是指subsequence,只需猜测您的序列开始的数字,然后运行线性扫描。如果您的意思是子字符串,那就更容易了 --- 作为练习留给 OP。

线性扫描是这样的:

char next = <guessed digit>;
int len = 0;
char *ptr = <pointer to input string>;
while (*ptr) {
  if ((*ptr) == next) {
    next = next + 1;
    if (next > '9') next = '0';
    len++;
  }
  ptr++;
} 

现在用一个设置为从“0”到“9”的所有数字的循环包装它,你就完成了,选择一个长度最长的。

于 2012-05-08T17:55:18.847 回答