解析:这道题,一开始没看懂题目,没看出是螺旋。接替思路如下:
如上图所示,以中间行为基准,向内,每行中间程递增或递减,递减值为行序号*2;且奇数行为’_’,偶数行为’*‘。左边开始为’*’,依次为’*_’,直到出现递增或递减前一个,分前后两部分考虑。
#include<stdio.h>
#include <string>
#include<math.h>
#include<iostream>
using namespace std;
int main()
{
int n;
scanf("%d",&n);
int nnn = n/2-1;
//cout<<nnn<<endl;;
for(int i=0;i<n;i++){
char a = '*';
char b='_';
if(i<=n/2){
if(i%2!=0){
a = '_';
b='*';
}else{
}
int j=0;
for(j;j<i-1;j++){
if(j%2==0){
cout<<'*';
}else{
cout<<'_';
}
}
for(int k=i-1;k<n-i;k++){
if(k>-1){
cout<<a;
}
}
for(int s=n-i;s<n;s++){
if((s-(n-i))%2==0){
cout<<b;
}else{
cout<<a;
}
}
}else{
if(i%2!=0){
a = '_';
b='*';
}else{
a = '*';
b='_';
}
int j=0;
//cout<<j<<' '<<nnn<<'n'<<nnn-1<<' ';
for(j;j<nnn-1;j++){
if(j%2==0){
cout<<'*';
}else{
cout<<'_';
}
}
if(nnn!=0){
cout<<b;
}
//cout<<nnn<<' '<<n-nnn<<' ';
for(int k=nnn;k<n-nnn;k++){
cout<<a;
}
for(int s=n-nnn;s<n;s++){
if((s-(n-nnn))%2==0){
cout<<b;
}else{
cout<<a;
}
}
//cout<<n-nnn<<' '<<n<<' ';
nnn--;
}
cout<<endl;
}
return 0;
}