我想以等边形式打印序列***********
使用C中的单个循环对给定输入n(此处为5)进行输入。
#include<stdio.h>
我使用普通方法尝试了一下,其中使用一个外循环和一个内循环打印相应的元素。现在,我的目标是通过使用1循环来减少时间复杂度。
for(int i=n;i>0;i--)
{
for(int j=0;j<n-i;j++)
printf(" ");
for(int j=0;j<i;j++)
{
printf("* ");
}
printf("\n");
}
答案 0 :(得分:0)
您可以尝试
#include <stdio.h>
int main()
{
int i, j, rows;
/* Input number of rows to print */
printf("Enter number of rows : ");
scanf("%d", &rows);
/* Iterate through rows */
for(i=1; i<=rows; i++)
{
/* Print leading spaces */
for(j=i; j<rows; j++)
{
printf(" ");
}
/* Print star */
for(j=1; j<=(2*i-1); j++)
{
printf("*");
}
/* Move to next line */
printf("\n");
}
return 0;
}
输出
Enter number of rows: 5
*
***
*****
*******
*********
答案 1 :(得分:0)
可以使用width和precision字段。星号允许在调用printf时包含一个参数。
#include <stdio.h>
#define SIZE 20
int main( void) {
char asterisk[SIZE * 2 + 2] = "*****************************************";
char input[SIZE] = "";
int repeat = 0;
int result = 0;
do {
printf ( "enter the number of lines to print [1 to %d]\n", SIZE);
if ( fgets ( input, sizeof input, stdin)) {//get a line
result = sscanf ( input, "%d", &repeat);//try to scan an integer
}
else {
fprintf ( stderr, "fgets EOF\n");
return 0;
}
} while ( 1 != result || repeat <= 0 || repeat > SIZE);
for ( int each = 0; each < repeat; ++each) {
printf ( "%*.*s\n", repeat + each, each * 2 + 1, asterisk);
}
return 0;
}
答案 2 :(得分:0)
是的,您可以使用不可读的单循环(可测试的HERE)。
<div class="flex-container">
<div class="item-1">1</div>
<div class="item-2">2</div>
<div class="item-3">3</div>
<div class="item2half">2.5</div>
<div class="item-4">4</div>
</div>
是否值得付出痛苦是值得怀疑的。我会拒绝。