问题描述
给定正方形边长width,如图按规律输出层层嵌套的正方形图形。
注意,为让选手方便观看,下图和样例输出均使用“”代替空格,请选手输出的时候使用空格而不是“”。
width=6:
******
*____*
*_**_*
*_**_*
*____*
******
输入格式
仅一行一个整数width。
输出格式
按规律输出图形,不要输出多余空格。
数据规模和约定
width满足width=4n+2,n为正整数。
且width<=50。
题目思路
运用递归的思想,将除头尾之外的符号全部转换,然后输出。
代码如下:
#include<stdio.h>
#include<string.h>
void disp(char str[],int n){
for(int i=0;i<n;i++){
printf("%c",str[i]);
}
printf("\n");
}
void f(char str[],int i,int j,int n){
char str1[50];
int k=i+1;
if(i+1>j)
return;
disp(str,n);
strcpy(str1,str);
if(str1[k]=='*')
for(k=i+1;k<j;k++){
str1[k]=' ';
}
else
for(k=i+1;k<j;k++){
str1[k]='*';
}
f(str1,i+1,j-1,n);
disp(str,n);
}
int main(){
int n;
scanf("%d",&n);
char str[n];
for(int i=0;i<n;i++)
str[i]='*';
f(str,0,n-1,n);
return 0;
}