我正在解决HackerRank -
Question Link - https://www.hackerrank.com/challenges/maximum-element/problem
的问题在一个解决方案中,我在开关情况下使用了"break"语句,在另一个解决方案中我没有。 当我不使用中断语句时,解决方案是错误的。这背后的原因是什么?
输入 -
10
1 97
2
1 20
2
1 26
1 20
2
3
1 91
3
带中断语句-
#include <bits/stdc++.h>
using namespace std;
int main() {
int noOfTestCases;
cin>>noOfTestCases;
vector <int> st;
for(int x=0; x<noOfTestCases; x++){
int query;
cin>>query;
switch (query) {
case 1:
int number;
cin>>number;
if(st.empty()){
st.push_back(number);
}
else if(number > st[st.size()-1]){
st.push_back(number);
}
else{
st.push_back(st[st.size()-1]);
}
break;
case 2:
if(!st.empty()){
st.pop_back();
}
break;
case 3:
cout<<st[st.size()-1]<<endl;
}
}
}
//Output -
//26
//91
没有中断声明-
#include <bits/stdc++.h>
using namespace std;
int main() {
int noOfTestCases;
cin>>noOfTestCases;
vector <int> st;
for(int x=0; x<noOfTestCases; x++){
int query;
cin>>query;
switch (query) {
case 1:
int number;
cin>>number;
if(st.empty()){
st.push_back(number);
}
else if(number > st[st.size()-1]){
st.push_back(number);
}
else{
st.push_back(st[st.size()-1]);
}
case 2:
if(!st.empty()){
st.pop_back();
}
case 3:
cout<<st[st.size()-1]<<" "<<query<<endl;
}
}
}
//Output -
//0
//0
//0
//0
//0
//0
//0
//0
//0
//0
考虑以下代码
switch (x) {
case 1:
std::cout << "onen";
case 2:
std::cout << "twon";
break;
case 3:
std::cout << "threen";
}
如果x
为 1,它将同时打印one
和two
。然后,由于break
语句,它将退出交换机块。注意x
打印"一"后不会与2
进行比较,直接落入打印"二"。
所以我对开关大小写语句有一个误解——
我的想法- 我认为在开关大小写中,如果表达式等于任何情况 D,那么进一步的情况 - E、F、G 将不会执行,无论 break 语句如何。
现实- 如果一个表达式等于任何情况 D,那么如果我们不使用 break 语句,进一步的情况 - E、F、G 也会被执行。
感谢杰弗里和保罗桑德斯澄清这个问题。