题目链接
https://www.dotcpp.com/oj/problem1115.html
解题思路
瞎搞就行,但是我瞎搞了好久,才做出这个水题的,而且根本没注意到是大写X,wa了n次,看了看题解才发现是大写。
找规律的题。
我的思路:
分五部分输出,输出一行那种第一个x前没空格的行;输出上半部分除去首行和单独一个x的行剩下的行;输出单独的x行;输出下半部分除去尾行和单独一个x的行剩下的行;输出一行那种第一个x前没空格的行。
大佬思路:
分两部分输出,上半部分输出第1行第(a-1)/2行,下半部分输出第(a+1)/2行第a-1行,看看每一行第一个x前空格个数与行号的关系,看看每一行两个x之间空格个数与行号的关系,找到关系本题就完成一大半了。
我的AC代码
#include<bits/stdc++.h>
using namespace std;
int main(){
int a,b,n;
cin>>n;
while(n--){
cin>>a>>b;
int h=a-2;
h/=2;
cout<<'X';
for(int i=1;i<=a-2;i++) cout<<' ';
cout<<'X'<<endl;
while(b--){
for(int i=1;i<=h;i++){
for(int j=1;j<=i;j++) cout<<' ';//before the first x
cout<<'X';
for(int j=1;j<=a-2-2*i;j++) cout<<' ';//between x and x
cout<<'X'<<endl;
}
for(int i=1;i<=h+1;i++) cout<<' ';
cout<<'X'<<endl;
for(int i=h;i>=1;i--){
for(int j=1;j<=i;j++) cout<<' ';//before the first x
cout<<'X';
for(int j=1;j<=a-2-2*i;j++) cout<<' ';//between x and x
cout<<'X'<<endl;
}
//end output
cout<<'X';
for(int i=1;i<=a-2;i++) cout<<' ';
cout<<'X'<<endl;
}
cout<<endl;
}
} 大佬代码
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,a,b;
cin>>n;
while(n--){
cin>>a>>b;
while(b--){
//上
for(int i=1;i<=a/2;i++){
for(int j=1;j<=a-i+1;j++)
if(i==j || j==a-i+1) cout<<'X';
else cout<<' ';
cout<<endl;
}
//下
for(int i=1;i<=a/2;i++){
for(int j=1;j<=a-i+1;j++)
if(j==a/2-i+2 || j==a/2+i) cout<<'X';
else cout<<' ';
cout<<endl;
}
}
cout<<'X';
for(int i=1;i<=a-2;i++) cout<<' ';
cout<<'X'<<endl<<endl;
}
}总结
脑子不好使,想的太慢,反应不过来。

京公网安备 11010502036488号