【发布时间】:2021-12-16 11:26:51
【问题描述】:
始终对称地比较数字与其中间数字。如果第一个数字大于最后一个数字,第一个是获胜的,我必须显示它,否则我显示最后一个并保持直到我达到中间数字(这是如果我有奇数个数字),如果数字没有任何东西与它相比自动获胜。
例如数字是 13257,答案是 7 5 2。
另一个 583241 答案是 5 8 3。 现在我只试图捕捉位数为奇数的情况。卡住了..这是我的代码。问题是这段代码不显示任何数字,而是在 if 语句中比较它们(我在调试时检查过)。
#include <iostream>
using namespace std;
int countDigit(int n) {
int count = 0;
while (n != 0) {
count++;
n /= 10;
}
return count;
}
int main() {
int n;
cin >> n;
int middle;
int count = countDigit(n);
if (count % 2 == 0) {
cout<<"No mid digit exsist!!";
}
else {
int lastDigit = n % 10;
middle = (count + 1) / 2;
for (int i = 0; i < middle; i++) {
for (int j = lastDigit; j<middle; j--) {
if (i > j) {
cout << i <<' ';
}
else {
cout << j;
}
}
}
}
return 0;
}
【问题讨论】:
-
“卡住了” -- 所以你来到了这里,但你还没有提出合适的问题。 “Can someone help me?” is not an actual question. 你应该在你的代码中找出一个特定的问题,询问它,然后把你的例子集中在那个单一的步骤上(c.f minimal reproducible example -- 虚拟化其他步骤)。如果你必须告诉我们你的作业作为一个整体的功能,你(很可能)要么不够专注,要么不够抽象地思考,无法为 Stack Overflow 提出一个好的问题。
-
问题是这段代码不显示任何数字。即使他们错了也应该这样做。
-
这是一个值得询问的问题。为了使您的问题变得更好,请将您的代码缩减为(可能)仅是
if语句(即您在调试时跟踪的语句)。跳过循环并进行概念验证。将i和j初始化为您选择的值,然后使用if语句。如果你仍然没有得到输出,你已经消除了很多“噪音”(在调试这个问题时可以忽略的问题的代码)。如果确实得到了输出,请慢慢添加代码,直到问题再次出现。