时间限制超过c ++算法

时间:2016-02-10 17:58:35

标签: c++ algorithm

我目前正在做一个给出序列的算法,检查是否有一个等于给定值的子序列。如果我有:

3 8
10
5
1
7 5
1
2
3
4
5
6
7
0 0

其中3 8和7 5是(序列大小,值),0 0告诉我们到达终点。在这种情况下,它将打印:

SUBSEQUENCE NOT FOUND
SUBSEQUENCE FOUND AT POSITION 2

我的问题是,当我将其提交给Mooshak时,为什么我的时间限制超过了?这是代码:

#include <iostream>
#include <stdio.h>
#include <stdlib.h>

int main(){

    int tamanho;
    int valor;
    int soma, numero;
    int sequencia[100];



    while(1){ 

        scanf("%d %d", &tamanho, &valor);

        if(tamanho != 0 && valor != 0){

            for(int i = 1; i <= tamanho; i++){
                scanf("%d", &numero);
                printf("%d\n", i);
                sequencia[i] = numero;
                printf("%d\n", i);
            }

            for(int i = 1; i < tamanho; i++){
                printf("i");
                for(int j = i; j < tamanho; j++){
                    soma = 0;
                    printf("j");
                    for (int z = i; z < j; z++){
                        printf("z");
                        soma = soma + sequencia[z];
                    }
                    if(soma == valor){
                        printf("SUBSEQUENCIA NA POSICAO %d \n", i);
                        exit(0);
                    }
                }
            }
            printf("SUBSEQUENCIA NAO ENCONTRADA\n");    
        }   
    }

    return 0;

}

1 个答案:

答案 0 :(得分:1)

你有一个无限循环。在您的顶级while循环中,替换为:

if(tamanho != 0 && valor != 0){
    // logic for one sequence
}

使用:

if(tamanho == 0 && valor == 0){
    return 0;
}

// logic for one sequence

(这是基于@MaxLybbert的评论)。

P.S。作为一般规则(有一些罕见的例外),您应该使用return 0;中的main()而不是exit(0);。有关原因,请参阅this thread中的已接受答案。但是,对于您的特定代码,它没有任何区别。