我对此很陌生,我会尽量通过图片等来简化这篇文章。
我目前正在解决Kattis上的编程问题,
在我的上一篇文章中,这个好人为我对其进行了编辑,以使其看起来不错,它显示了编程问题的图片,但似乎只允许我显示一个链接。
我首先用Java解决了这个问题,尽管我得到了正确的答案,但是由于超过了时间限制,所以无法接受。
我决定用c ++解决它,我将代码从java复制到c ++,看来c ++中的break语句的行为与java不同。
这是我的c ++代码,当我找到答案时,我需要循环完全中断,但是它一直在寻找更多答案。循环在Java中完美中断,有人知道为什么它不能在c ++中工作吗?
#include <iostream>
using namespace std;
int main() {
int cases;
cin >> cases;
for (int i = 0; i < cases; i++)
{
int n;
cin >> n;
int sum = 0;
int digits = n;
while (digits > 0)
{
sum += digits % 10;
digits = digits / 10;
}
for (int j = n - 1; j >= 0; j--)
{
int sum2 = 0;
int digits2 = j;
while (digits2 > 0)
{
sum2 += digits2 % 10;
digits2 /= 10;
}
if(sum-1 == sum2)
{
cout << j << " " << endl;
break;
}
}
}
return 0;
}
答案 0 :(得分:1)
AFAICT,至少在涉及break
语句的情况下,您的代码工作正常。我对其进行了少许修改,以打印出更多信息(在遇到麻烦时这绝不是一个坏主意),现在看起来像这样:
#include <iostream>
using namespace std;
int main() {
int cases;
cin >> cases;
for (int i = 0; i < cases; i++)
{
int n;
cin >> n;
int sum = 0;
int digits = n;
while (digits > 0)
{
sum += digits % 10;
digits = digits / 10;
}
cout << "sum=" << sum << "\n";
for (int j = n - 1; j >= 0; j--)
{
int sum2 = 0;
int digits2 = j;
while (digits2 > 0)
{
sum2 += digits2 % 10;
digits2 /= 10;
}
if(sum-1 == sum2)
{
cout << "j=" << j << " " << endl;
break;
}
}
}
return 0;
}
输入以下内容:
2
12345
6789
它产生:
sum=15
j=12344
sum=30
j=6788
那是您的期望吗?
Live demo-您可以在那里试用代码。另请参阅:Why is "using namespace std" considered bad practice?。
也请排除sum_digits()
。