我正在嘗試這段代碼;
#include <stdio.h>
void main()
{
int no_row=5,c=1,blk,i,j;
//printf("Input number of rows: ");
//scanf("%d",&no_row);
for(i=0;i<no_row;i =2)
{
for(blk=1;blk<=no_row-i;blk )
printf(" ");
for(j=0;j<=i;j )
{
if (j==0||i==0)
c=1;
else
c=c*(i-j 1)/j;
printf("% 4d",c);
}
printf("\n");
}
}
我需要幫助來撰寫代碼以獲得如圖所示的輸出。電源 2 模式在圖片中
uj5u.com熱心網友回復:
有困難的方法(使用 5 個不同的變數),也有簡單的方法(使用緩沖區和三個變數)。
這具有“嵌套回圈”并向上和向下計數,并適當縮進。
#include <stdio.h>
int main() {
char buf[ 128 ], *at;
int r, i;
int lftBlnk = 32;
for( r = 1; r <= 256; r *= 2 ) {
at = buf;
for( i = 1; i <= r; i *= 2 ) // ascending
at = sprintf( at, "%-4d", i );
for( i /= 4; i; i /= 2 ) // descending
at = sprintf( at, "%-4d", i );
printf( "%*s%s\n", lftBlnk, "", buf ); // indent & output
lftBlnk -= 4;
}
return 0;
}
輸出
1
1 2 1
1 2 4 2 1
1 2 4 8 4 2 1
1 2 4 8 16 8 4 2 1
1 2 4 8 16 32 16 8 4 2 1
1 2 4 8 16 32 64 32 16 8 4 2 1
1 2 4 8 16 32 64 128 64 32 16 8 4 2 1
1 2 4 8 16 32 64 128 256 128 64 32 16 8 4 2 1
編輯:
玩得開心,去掉不必要的東西,代碼變得非常緊湊。
int main() {
for( int lftBlnk = 32, r = 1; r <= 256; r *= 2, lftBlnk -= 4 ) {
printf( "%*s", lftBlnk, "");
int i;
for( i = 1; i <= r; i *= 2 ) printf( "%-4d", i );
for( i /= 4; i; i /= 2 ) printf( "%-4d", i );
putchar( '\n' );
}
return 0;
}
事實上,讓我們去掉一個變數,添加另一個變數,并提高代碼的靈活性(沒有像 '4' 這樣的重復常量和像 256 這樣的幻數。)現在,指定編號。行數,并為每列留出足夠的寬度...
int main() {
int rows = 11, wid = 5;
for( int r = 0; r < rows; r ) {
printf( "%*s", (rows-1-r)*wid, "");
int i;
for( i = 1; i <= (1 << r); i *= 2 ) printf( "%-*d", wid, i );
for( i /= 4; i; i /= 2 ) printf( "%-*d", wid, i );
putchar( '\n' );
}
return 0;
}
1
1 2 1
1 2 4 2 1
1 2 4 8 4 2 1
1 2 4 8 16 8 4 2 1
1 2 4 8 16 32 16 8 4 2 1
1 2 4 8 16 32 64 32 16 8 4 2 1
1 2 4 8 16 32 64 128 64 32 16 8 4 2 1
1 2 4 8 16 32 64 128 256 128 64 32 16 8 4 2 1
1 2 4 8 16 32 64 128 256 512 256 128 64 32 16 8 4 2 1
1 2 4 8 16 32 64 128 256 512 1024 512 256 128 64 32 16 8 4 2 1
uj5u.com熱心網友回復:
首先,修復計算以獲得 2 的冪 然后使用制表符作為分隔符以獲得與圖片相同的對齊方式
1
1 2 1
1 2 4 2 1
1 2 4 8 4 2 1
1 2 4 8 16 8 4 2 1
1 2 4 8 16 32 16 8 4 2 1
1 2 4 8 16 32 64 32 16 8 4 2 1
1 2 4 8 16 32 64 128 64 32 16 8 4 2 1
1 2 4 8 16 32 64 128 256 128 64 32 16 8 4 2 1
1 2 4 8 16 32 64 128 256 512 256 128 64 32 16 8 4 2 1
#include <stdio.h>
void main()
{
int no_row=10,c=1,blk,i,j;
//printf("Input number of rows: ");
//scanf("%d",&no_row);
for(i=0;i<no_row;i )
{
for(blk = 0; blk < no_row - i - 1; blk )
printf("\t");
c = 1;
printf("%d\t",c);
for(j = 0;j < i;j )
{
c=c*2;
printf("%d\t",c);
}
for(j = 0;j < i;j )
{
c=c/2;
printf("%d\t",c);
}
printf("\n");
}
}
uj5u.com熱心網友回復:
我用另一種方法來實作你所說的
這種方法需要兩個引數,一個是需要提前的倍數,另一個是需要提前的行數。
#include <stdio.h>
//row main how many lines do you want to print
//multiple means you want it to be several times expanded
void Triangle(int multiple, int row){
int value = 1, mid;
for (int i = 0; i < row; i )
{
for (int j = 0; j < 2*row-1; j )
{
mid = (2*(row-1) 1)/2; //It means that the middlemost pointer points to
//mid - i adn mid i means that there is a majority of the number that needs to be displayed on this line
if (j >= mid -i && j<= mid i)
{
if (j>mid)
{
value = value / multiple;
printf("%d", value);
}else{
printf("%d", value);
if (j!= mid)
{
value = value * multiple;
}
}
}else{
printf(" ");
}
printf(" ");
}
value = 1;
printf("\n");
}
}
//Example
int main(){
Triangle(2,7);
return 0;
}
結果:
當然,您甚至可以使用 3 或更多的倍數
int main(){
Triangle(3,7);
return 0;
}
結果:
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/505806.html
上一篇:for回圈中的每個其他元素
下一篇:如何迭代串列中的每個索引號?