如何在正方形内打印带有两个字母的 X

How to print a X with two letters inside a square

我正在尝试制作这个形状但卡在了这里。我尝试了不止一个计数器,但又失败了。

P p p p p p Q
p P p p p Q q
p p P p Q q q
p p p Q q q q
p p Q q Q q q
p Q q q q Q q
Q q q q q q Q
int main()
{  
    int loopLimit = 7;
    int upperCharacter = 0;
    
    do {
        int loopCounter = 0;

        do {
            if (loopCounter == upperCharacter) std::cout << "P ";
            else std::cout << "p ";
            loopCounter = loopCounter + 1;
        } while (loopCounter < loopLimit);

        upperCharacter = upperCharacter + 1;
        loopLimit = loopLimit - 1;
        std::cout << "\n";
    } while (loopLimit > 0);
}

我的代码当前输出:

P p p p p p p 
p P p p p p 
p p P p p 
p p p P 
p p p 
p p 
p 

考虑到How do I ask and answer homework questions?
我建议尝试以下方法,以避免您将自己编程到角落。

使用两个嵌套循环(我更喜欢 for,但如果您对 do while 更有信心,请继续使用)输出所有相同字母的正方形。之后不要更改这些循环。

然后在两个字母之间使用if-else到select。
然后在三个之间使用一个if-elseif-else到select。
然后四.

我相信你应该在这里学习的技巧是创造条件。相互依赖的循环的复杂结构是一个替代方案,但我的猜测是它会让你的事情变得更难。

我认为合适的字母顺序应该是:

  • p
  • Q 在完整的第一条对角线上
  • q
  • P 在完整的其他对角线上,但之后检查第一个对角线
  • Q 在第二条对角线的另一半

请注意,正确排列条件的顺序很重要,例如对于对角线交叉点。

一纸一笔解决了这个问题。

解决方法如下:

for (int satirSayaci = 1; satirSayaci < 8; satirSayaci++) {
        for (int karakterSayaci = 1; karakterSayaci < 8; karakterSayaci++)
        {
            if (karakterSayaci >= 8 - satirSayaci) {
                if (karakterSayaci == 8 - satirSayaci || karakterSayaci == satirSayaci) std::cout << "X ";
                else std::cout << "x ";
            } else {
                if (karakterSayaci == satirSayaci) std::cout << "P ";
                else std::cout << "p ";
            }
        }

        // Yeni bir satir yazdir
        std::cout << std::endl;
    }