我目前正在做一个给出序列的算法,检查是否有一个等于给定值的子序列。如果我有:
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;
}
答案 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中的已接受答案。但是,对于您的特定代码,它没有任何区别。