首页 文章

时间限制超过c算法

提问于
浏览
-2

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

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 回答

  • 1

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

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

    有:

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

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

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

相关问题