#c #logic
Вопрос:
Кто-нибудь может сделать логику для этого шаблона? Я также попытался использовать 2 для циклов. У меня только что было интервью, где меня попросили создать звездный узор, как показано на рисунке.
#include <stdio.h>
int main()
{
char f;
int n;
printf("Enter the number:");
scanf("%d", amp;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;
}
Комментарии:
1. Я предполагаю, что это будет как-то связано с
printf("* ");
печатью вдвое большего количества символовprintf(" ");
. Что произойдет, если вы измените его наprintf("*");
(без дополнительного места)? Кроме того,printf("n");
похоже, что он находится в неправильном месте (должно быть только n^2 строк, а не n^3 строк).2.Попробуйте
if ((k j) % n == 1)
{
printf("*");
}
else
{
printf(" ");
}
переместитьprintf("n");
послеi
цикла.
Ответ №1:
Вы можете использовать printf()
для заполнения строки требуемым количеством пробелов при печати символа звездочки ( *
). Таким образом, вам не нужно беспокоиться о том, чтобы расставить его самостоятельно:
#include <stdio.h>
#include <string.h>
int main(void) {
int n;
printf("Enter the number: ");
scanf("%d", amp;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] = ' ';
}
}
}
Ответ №2:
Код C для печати этого шаблона с использованием двух циклов будет
#include<stdio.h>
int main()
{
int n;
printf("Enter pattern length :");
scanf("%d",amp;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");
}
}
Ответ №3:
Зачем делать две петли, когда можно сделать одну? Если вы понаблюдаете за последовательностью напечатанных символов, включая новые строки, вы можете увидеть, что последний символ, напечатанный в каждой 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);
}
}
Ответ №4:
Эту проблему можно решить, используя 2 для цикла.
#include<stdio.h>
int main()
{
int num;
printf("Enter pattern length :");
scanf("%d",amp;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");
}
}
Ответ №5:
Решение Java 1:
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