我撰寫了一個程式,它以數字(整數)作為輸入,并使用 for 回圈輸出 1 和 0 的模式。例如,當輸入為 7 時,輸出為:
1
1 1
1 0 1
1 0 0 1
1 0 0 0 1
1 0 0 0 0 1
1 1 1 1 1 1 1
源代碼如下:
#include <stdio.h>
int main()
{
int rows;
int i,j;
scanf("%d", &rows);
for(i=0;i<rows;i )
{
for(j=0;j<=i;j )
{
if(i==j)
{
printf("1 \n");
}
else if(j==0)
{
printf("1 ");
}
else if (i==rows-1)
{
printf("1 ");
}
else
{
printf("0 ");
}
}
}
return 0;
}
當我編譯 codem 時,創建的令牌數為 107。我需要將令牌數減少到小于 102(以滿足測驗要求)。
任何建議我該怎么做?
uj5u.com熱心網友回復:
檢查這個:
int main(void)
{
int rows;
scanf("%d", &rows);
for(int i=0;i<rows;i )
for(int j=0;j<=i;j )
printf(i == j ? "1 \n" : !j || i == rows - 1 ? "1 " : "0 ");
}
https://godbolt.org/z/3re3beW8W
甚至:
int main(void)
{
int rows;
scanf("%d", &rows);
for(int i=0;i<rows;i ,putchar('\n'))
for(int j=0;j<=i;j )
printf(!j || i == rows - 1 || i == j ? "1 " : "0 ");
}
或者
int main(void)
{
int rows;
scanf("%d", &rows);
for(int i=0;i<rows;i ,putchar('\n'))
for(int j=0;j<=i;j )
printf("%d ", !j || i == rows - 1 || i == j);
}
uj5u.com熱心網友回復:
為什么不去掉 if-else 鏈中的大括號呢?那是 8 個令牌,這將使您低于您的要求。
uj5u.com熱心網友回復:
for(j=0;j<=i;j ){
if(i==j)
printf("1 \n");
else if(j==0 || i==row-1)
printf("1 ");
else
printf("0 ");
}
可以從您的代碼中洗掉許多令牌。
uj5u.com熱心網友回復:
我會寫以下方式
include <sdtio.h>
int main( void )
{
while (1)
{
printf( "Enter a non-negative number (0 - exit): " );
unsigned int n;
if (scanf( "%u", &n ) != 1 || n == 0) break;
putchar( '\n' );
for (unsigned int i = 0; i < n; i )
{
for (unsigned int j = 0; j < i 1; j )
{
unsigned int value = i == 0 || i == n - 1 || j == 0 || j == i;
printf( "%d ", value );
}
putchar( '\n' );
}
putchar( '\n' );
}
}
程式輸出可能看起來像
Enter a non-negative number (0 - exit): 1
1
Enter a non-negative number (0 - exit): 2
1
1 1
Enter a non-negative number (0 - exit): 3
1
1 1
1 1 1
Enter a non-negative number (0 - exit): 4
1
1 1
1 0 1
1 1 1 1
Enter a non-negative number (0 - exit): 5
1
1 1
1 0 1
1 0 0 1
1 1 1 1 1
Enter a non-negative number (0 - exit): 6
1
1 1
1 0 1
1 0 0 1
1 0 0 0 1
1 1 1 1 1 1
Enter a non-negative number (0 - exit): 7
1
1 1
1 0 1
1 0 0 1
1 0 0 0 1
1 0 0 0 0 1
1 1 1 1 1 1 1
Enter a non-negative number (0 - exit): 0
或者如果要減少令牌的數量然后
#include <stdio.h>
int main( void )
{
unsigned n = 0;
scanf( "%u", &n );
for (unsigned i = 0; i < n; i )
{
for (unsigned j = 0; j < i 1; j )
{
unsigned value = i % ( n - 1 ) == 0 || j % i == 0;
printf( "%d ", value );
}
putchar( '\n' );
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/363020.html
上一篇:簡單的C程式和理解輸出
