C语言 如何打印这个图案?有人能解释一下逻辑吗?



Star pattern

谁可以为这个模式做逻辑?我也试过使用2 for循环。我刚刚参加了一个面试,面试官要求我制作如图所示的星形图案。

#include <stdio.h>
int main()
{
char f;
int n;
printf("Enter the number:");
scanf("%d", &n);
int i, j, s, k, l, m;
for (s = 1; s <= n; s++) //printing
{
for (k = 1; k <= n; k++)
{
for (i = 1; i <= n; i++) //pattern
{
for (j = 1; j <= n; j++)
{
if ((i + j == n + 1)) //star positions
{
printf("* ");
}
else
{
printf(" ");
}                
}
printf("n");   //next line
}            
}        
}
return 0;
}

您可以在打印星号(*)字符时使用printf()为您填充所需的空格量。这样,你就不用担心间距问题了:

#include <stdio.h>
#include <string.h>
int main(void) {
int n;
printf("Enter the number: ");
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
char pat[n + 1];
memset(pat, 0, sizeof pat);
pat[0] = '*';
for (int j = 1; j <= n; j++) {
for (int k = 1; k <= n; k++)
printf("%*s", n, pat);
printf("n");
pat[j] = ' ';
}
}
}

C代码要打印这个图案,使用两个For循环将是

#include<stdio.h>
int main()
{
int n;
printf("Enter pattern length :");
scanf("%d",&n);
int matrix=n*n;
for(int i=1;i<=matrix;i++)
{
for(int j=1;j<=matrix;j++)
{
if((i+j-1)%n==0)
{
printf("*");
}
else
{
printf(" ");
}
}
printf("n");
}
}

明明可以做一个循环,为什么还要做两个循环呢?如果您观察打印的字符序列,包括换行符,您可能会看到最后一个字符在每个n*n + 1序列中打印的是一个换行符,在每个n序列中的最后一个字符是一个'*'。其余为空格。

#include <stdio.h>
#include <stdlib.h>
int main (int argc, char **argv)
{
if (argc != 2)
{
fprintf(stderr, "usage: star_pattern numn");
exit(EXIT_FAILURE);
}
int n = atoi(argv[1]);
int dim = n*n;
for (int i = 0; i < (dim+1)*dim; i++)
{
if (i%(dim+1) == dim)
fputc('n', stdout);
else if (i % n == n-1)
fputc('*', stdout);
else
fputc(' ', stdout);
}
}

这个问题可以使用2 for循环来解决。

#include<stdio.h>
int main()
{
int num;
printf("Enter pattern length :");
scanf("%d",&num);

int matrix=num*num;
for(int i=0;i<matrix;i++)
{

for(int j=0;j<matrix;j++)
{
if((i+j+1)%num==0)
{
printf("*");
}
else
{
printf(" ");
}
}
printf("n");
}
}

Java1

解决方案:
private static void stars(int n) {
for (var i = 0; i < n; i++) {
for (var j = 0; j < n; j++) {
var p = " ".repeat(n-j-1) + '*' + " ".repeat(j);
System.out.println(p.repeat(n));
}
}
}

或位优化(?)

private static void stars(int n) {
var p = (" ".repeat(n-1) + '*').repeat(n+1);
var l = n*n;
for (var i = 0; i < l; i++) {
System.out.println(p.substring(i%n, l+i%n));
}
}

n = 2输出:

* *
* * 
* *
* * 

andn = 3:

*  *  *
*  *  * 
*  *  *  
*  *  *
*  *  * 
*  *  *  
*  *  *
*  *  * 
*  *  *  

1<一口>问题被标记为Java

相关内容

  • 没有找到相关文章

最新更新