我必须用c编写代码,打印出目标表模式。
So input for example:
3
1
2
3
and the output:
*
*****
* *
* * *
* *
*****
*********
* *
* ***** *
* * * *
* * * * *
* * * *
* ***** *
* *
*********
我已经做了几次尝试,但它不起作用,无法做到中间区域。
我已经完成了这段代码,对于 1-2 来说它可以工作,但是对于 2+ 来说我不能这样做。
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <math.h>
int main()
{
int n,i,k;
int p=0;
int j=0,l=0;
int d=0;
scanf("%d",&n);
for(i=0; i<n; i++)
{
scanf("%d",&k);
d=((4*k)-3)*((4*k)-3);
p=((4*k)-3);
for(j=0; j<p; j++)
{
if(j==0 || j==p-1)
{
for(l=0; l<p; l++)
printf("*");
printf("\n");
}
if(j==p/2+1)
{
for(l=0; l<p; l++)
{
if(l%2==0)
printf("*");
else printf(" ");
}
printf("\n");
}
if(j>0 && j<p/2)
{
for(l=0; l<p; l++)
{
if(l==0 || l==p-1)
printf("*");
else printf(" ");
}
printf("\n");
}
if(j>p/2 && j<p-1)
{
for(l=0; l<p; l++)
{
if(l==0 || l==p-1)
printf("*");
else printf(" ");
}
printf("\n");
}
}
}
return 0;
}
最佳答案
#include <stdio.h>
#include <stdbool.h>
bool online(int size, int r, int c){
if(size < 1)
return false;
int last = size-1;
if((r == 0 || r == last) && (0 <= c && c <= last))
return true;
if((c == 0 || c == last) && (0 <= r && r <= last))
return true;
return online(size-4, r-2, c-2);
}
int main(void){
int t, n, size;
scanf("%d", &t);
while(t--){
scanf("%d", &n);
size = 4*n-3;//1 + 4*(size-1);
for(int r = 0; r < size; ++r){
for(int c = 0; c < size; ++c){
if(online(size, r, c))
putchar('*');
else
putchar(' ');
}
putchar('\n');
}
putchar('\n');
}
}
关于c - 打印出目标表模式中的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41253211/