题目链接
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; } }
总结
脑子不好使,想的太慢,反应不过来。