gpt4 book ai didi

c++ - 打印雷电状图案

转载 作者:搜寻专家 更新时间:2023-10-31 00:52:29 27 4
gpt4 key购买 nike

我最近在一次采访中遇到了这个问题,当时我必须打印一个图案。该模式看起来微不足道,但我想不出解决方案。请帮我找出我的代码中的错误。

下面是测试用例:

n = 1
x


n = 2
x
x x
x


n = 3
x
x
x o x
x
x


n = 5
x
x
o x
o x
x o x o x
x o
x o
x
x


n = 10
x
x
o x
o x
x o x
x o x
o x o x
o x o x
x o x o x
x o x o x x o x o x
x o x o x
x o x o
x o x o
x o x
x o x
x o
x o
x
x

这是我的尝试:

#include <iostream>
using namespace std;

string reverse(string s) {
int start = 0, end = s.size()-1;
while(start<end) {
char temp = s[start];
s[start] = s[end];
s[end] = temp;
++start;
--end;
}
return s;
}

int main() {
int n;
cin>>n;
int count=0;
string s = "X";
bool wasLastX = true;
for (int i=1;i<=n-1;++i) {
for(int j=1;j<=n-1;++j) {
cout<<" ";
}
cout<<s<<endl;
if (i == n-1) {
break;
}
if (s[0] == 'X' || s[0] == 'O') {
s.insert(s.begin(), ' ');
}
else {
if (wasLastX) {
s.insert(s.begin(), 'O');
wasLastX = false;
}
else {
s.insert(s.begin(), 'X');
wasLastX = true;
}
}
++count;
}

string temp = s;
if (n%2 == 0) {
cout<<s<<" "<<s<<endl;
}
else {
if (s[1] == 'X') {
s.insert(s.begin(), 'O');
}
else if (s[1] == 'O') {
s.insert(s.begin(), 'X');
}
cout<<reverse(temp)<<s<<endl;
}

int count1 = 0;
for (int i=1;i<=n-1;++i) {
cout<<" ";
for(int j=1;j<=count1;++j) {
cout<<" ";
}
cout<<temp<<endl;
temp.pop_back();
++count1;
}
return 0;
}

首先我打印上半部分,然后从生成的上半部分,对于下半部分,我反转它并再次打印。

这是我的输出:

n = 1
xx

n = 3
X
X
X O X
X

n = 5
X
X
O X
O X
X O X O X
O X
O
O

但是,代码在 n = 2 和 n = 10 时运行良好。但同样,对于 n = 4,它显示错误的输出。因此,我不能一概而论它不适用于 n 的奇数值。对于 n = 4,我明白了,这是错误的,因为中间行之后的所有元素都应该以 x 开头,而我的以 o 开头。

   X
X
O X
O X O X
O X
O
O

最佳答案

因为最初有一个 [java] 标签附加到这个问题,所以我试了一下使用 java 代码实现它。希望这有助于构建 C 代码的逻辑

public class ThunderBoltPattern {
public static void main(String[] args) {
int input = 5;
int evenOddFactor = (input % 2 == 0) ? 0 : 1; // If it is even, add 1 else it should be 0
// length on pattern based on input
int length = input * 2 - evenOddFactor;

// Using character array to store individual character at various point
char[][] array = new char[length][length];
int factor = 0;

while (factor < input) {
for (int i = 0 + factor, j = input - 1; i < input; i++, j++) {
array[i][j] = 'x';
array[j][i] = 'x';
}
for (int i = 2 + factor, j = input - 1; i < input; i++, j++) {
array[i][j] = 'o';
array[j][i] = 'o';
}
// Because character are repeated on same line after 4 digit, using 4 as factor
factor += 4;
}

for (char[] chs : array) {
for (char ch : chs) {
System.out.print(ch);
}
System.out.println();
}
}
}

关于c++ - 打印雷电状图案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51574197/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com