我如何擦除最后一颗星?
How do I erase the last star?
我尝试了很多东西,但我陷入了沼泽。
当你输入一个奇数时,最后一行的一颗星会弹出,你试图擦掉它,但是很难...
#include<iostream>
using namespace std;
int main()
{
int num, star, line;
cout << "num ";
cin >> num;
for (line = 0; line < num/2+1; line++)
{
for (star = 0; star <= line; star++)
{
cout << "*";
}
for (star = num/2; star > line; star--)
{
cout << "x";
}
for (star = num/2-1; star > line; star--)
{
cout << "x";
}
for (star = 0; star <= line; star++)
{
cout << "*";
}
cout << endl;
}
}
问题是最后一行打破了模式。
这是你得到的:
*xxx*
**x**
******
根据您的描述,我认为这就是您想要的:
*xxx*
**x**
*****
在最后一行之前的所有行中,x
:的个数都是奇数,但在最后一行中,个数是偶数(零)。您首先添加三个 *
,然后添加零 x
,然后添加三个 *
,这样就形成了 6 个字符,而前几行只有 5 个。
修复它的直接方法可能是计算 *
s 和 x
s 的输出,最后打印 num
减去到目前为止打印的数量 *
秒。示例:
#include <iostream>
int main() {
int num, star, line;
if(!(std::cin >> num)) return 1; // error
num |= 1; // make sure the number is odd
for (line = 0; line < num / 2 + 1; line++) {
int output = 0; // count how many *'s and x's you've printed
for (star = 0; star <= line; star++) {
++output;
std::cout << '*';
}
for (star = num / 2; star > line; star--) {
++output;
std::cout << 'x';
}
for (star = num / 2 - 1; star > line; star--) {
++output;
std::cout << 'x';
}
// now print num - output asterisks:
for (star = 0; star < num - output; star++) {
std::cout << '*';
}
std::cout << '\n';
}
}
我尝试了很多东西,但我陷入了沼泽。
当你输入一个奇数时,最后一行的一颗星会弹出,你试图擦掉它,但是很难...
#include<iostream>
using namespace std;
int main()
{
int num, star, line;
cout << "num ";
cin >> num;
for (line = 0; line < num/2+1; line++)
{
for (star = 0; star <= line; star++)
{
cout << "*";
}
for (star = num/2; star > line; star--)
{
cout << "x";
}
for (star = num/2-1; star > line; star--)
{
cout << "x";
}
for (star = 0; star <= line; star++)
{
cout << "*";
}
cout << endl;
}
}
问题是最后一行打破了模式。
这是你得到的:
*xxx*
**x**
******
根据您的描述,我认为这就是您想要的:
*xxx*
**x**
*****
在最后一行之前的所有行中,x
:的个数都是奇数,但在最后一行中,个数是偶数(零)。您首先添加三个 *
,然后添加零 x
,然后添加三个 *
,这样就形成了 6 个字符,而前几行只有 5 个。
修复它的直接方法可能是计算 *
s 和 x
s 的输出,最后打印 num
减去到目前为止打印的数量 *
秒。示例:
#include <iostream>
int main() {
int num, star, line;
if(!(std::cin >> num)) return 1; // error
num |= 1; // make sure the number is odd
for (line = 0; line < num / 2 + 1; line++) {
int output = 0; // count how many *'s and x's you've printed
for (star = 0; star <= line; star++) {
++output;
std::cout << '*';
}
for (star = num / 2; star > line; star--) {
++output;
std::cout << 'x';
}
for (star = num / 2 - 1; star > line; star--) {
++output;
std::cout << 'x';
}
// now print num - output asterisks:
for (star = 0; star < num - output; star++) {
std::cout << '*';
}
std::cout << '\n';
}
}