给S一个n个整数的序列,即S = s1,s2,...,sn。计算是否可以将S分成两部分:s1,s2,...,si和si +1,si +2,...,sn(0 ≤ i ≤ n),使得第一部分严格递减,而第二部分严格递增。当x〉y时,我们说x严格大于y,所以严格增数列可以是148,但144不是严格增数列.
也就是说,在序列中,如果数字是递减的,它们可以在某个点开始递增。一旦数字开始递增,它们就不能在任何点进一步递减。由递增数字或递减数字组成的序列都是有效的序列。因此,在这两种情况下,都打印true。
你只需要打印真/假,不需要拆分序列。
输入格式:
第1行:整数"n"
生产线2及以后:"n"行上的"n"个整数(每行上的单个整数)
输出格式:
"真"或"假"(不带引号)
制约因素:
1〈= n〈= 10^7
样品输入1:
5
9
8
4
5
6
示例输出1:
true
样本输入2:
3
1
2
3
示例输出2:
true
样本输入3:
3
8
7
7
示例输出3:
false
样本格式三说明:
8 7 7不是严格递减的,所以输出为假。
样本输入4:
6
8
7
6
5
8
2
示例输出4:
false
样本输入4的说明:
该系列为:八七六五八
它首先严格减少(8 7 6 5)。然后严格增加(5 8)。但随后又开始严格减少(8 2)。因此,此测试用例的输出为"假"
#include<iostream>
using namespace std;
int main() {
int n;
cin >> n;
int p;
cin >> p;
bool isDec = true;
int i = 1,c;
while(i <= n - 1){
cin >> c;
if(c > p){
if(isDec == true){
isDec = false;
}
isDec = true;
p = c;
} else if(c < p){
if(isDec == false){
isDec = false;
}
isDec = true;
p = c;
} else {
isDec = false;
break;
}
i++;
}
if(isDec){
cout << "true" << endl;
} else{
cout << "false" << endl;
}
}
这段代码有什么问题?它在上一个测试用例中失败了。
4条答案
按热度按时间5gfr0r5j1#
ilmyapht2#
kpbwa7wx3#
}
643ylb084#
我们需要设置两个布尔值,如图所示。一旦我们的数列从递减变为递增,我们就将
change
设置为true
。如果我们已经将
change
设置为true
,但是我们的数列再次从递减变为递增,我们将result
bool设置为false。最后,我们可以输出
result
来得到我们需要的答案。如果我们得到两个连续项相等,我们直接将
result
设置为false
,因为它直接违反了严格递增或严格递减的条件。我们不会在任何地方使用break,因为用户需要给予所有输入,然后显示结果。
至于调试你的代码,你需要改变你的方法。还有,你甚至打算通过这样做来完成什么: