如何打印这个图案?谁能解释逻辑?
How to print this pattern? can anyone explain logic?
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;
}
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
的输出:
* *
* *
* *
* *
和n = 3
:
* * *
* * *
* * *
* * *
* * *
* * *
* * *
* * *
* * *
1 - 问题被标记为 Java
使用两个 for 循环打印此模式的 C 代码 为
#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");
}
}
这个问题可以用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");
}
}
您可以使用 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] = ' ';
}
}
}
既然可以进行一次循环,为什么还要进行两次循环?如果您观察打印的字符序列,包括换行符,您可能会看到最后一个字符
每个 n*n + 1
序列中打印的是换行符,每个 n
序列中的最后一个字符是“*”。其余为空格。
#include <stdio.h>
#include <stdlib.h>
int main (int argc, char **argv)
{
if (argc != 2)
{
fprintf(stderr, "usage: star_pattern num\n");
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);
}
}
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;
}
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
的输出:
* * * * * * * *
和n = 3
:
* * * * * * * * * * * * * * * * * * * * * * * * * * *
1 - 问题被标记为 Java
使用两个 for 循环打印此模式的 C 代码 为
#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");
}
}
这个问题可以用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");
}
}
您可以使用 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] = ' ';
}
}
}
既然可以进行一次循环,为什么还要进行两次循环?如果您观察打印的字符序列,包括换行符,您可能会看到最后一个字符
每个 n*n + 1
序列中打印的是换行符,每个 n
序列中的最后一个字符是“*”。其余为空格。
#include <stdio.h>
#include <stdlib.h>
int main (int argc, char **argv)
{
if (argc != 2)
{
fprintf(stderr, "usage: star_pattern num\n");
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);
}
}