我目前正在做一个给出序列的算法,检查是否有一个等于给定值的子序列 . 如果我有:
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 回答
你有一个无限循环 . 在顶级
while
循环中,替换为:有:
(这是基于@MaxLybbert的评论) .
附:作为一般规则(有一些罕见的例外),您应该使用
main()
来自main()
而不是调用exit(0);
. 有关原因,请参阅this thread中接受的答案 . 但是,对于您的特定代码,它没有任何区别 .