欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

查詢mysql多個字,sql查詢語句中的單引號

林國瑞2年前24瀏覽0評論

如何用c語言for循環打出一個空心菱形?

畫圖畫圖(不畫圖難以會意)。下面是一個草圖?(找了個在線白板畫的,漂亮吧~^(* ̄(oo) ̄)^)。

如圖所示,假設要畫一個規格為2a*2b的◇。a,b分別為對應方向的中心位置。不難看出,程序一共需要打印2b+1行,2a+1列(因為第0行0列也是需要打印的,但是程序是從0開始計數的,因此最后的行列下標就是2a和2b,2a+1和2b+1是數量)。

程序打印通常會使用空格和*作為打印菱形的字符,由于基本的輸出單位是字符(相當于菱形內的所有角的大小是固定的,不論多么大的菱形都是相似的),所以2a和2b會相互制約。我想打印一個10*50的菱形時,當打印到第5行是就已經從橫向偏移量為0的位置開始打印了,第6行將會從-1列開始打印,這樣打印出的圖案將會是一個不完成的菱形,如下圖,虛線部分將不會被打印。

程序以行為輸出,因此我們不在控制y軸,只通過控制x軸方向的a來控制菱形的大小。我們不妨來歸納一下打印的規則:

第0行需要打印a個空格、打印一個*、換行。

第1行需要打印a-1個空格、打印1個*、打印1個空格、打印1個*、換行。

第2行需要打印a-2個空格、打印1個*、打印3個空格、打印1個*、換行。

第3行需要打印a-3個空格、打印1個*、打印5個空格、打印1個*、換行。

第n行需要打印a-n個空格、打印1個*、打印2n-1個空格、打印1個*、換行。

一直需要打印到n==a。打印0個空格、打印1個*、打印2a-1個空格、打印1個*、換行。

之后開始往回畫。

第a+1行需要打印1個空格、打印1個*、打印2a-3個空格、打印1個*、換行。

第a+2行需要打印2個空格、打印1個*、打印2a-5個空格、打印1個*、換行。

第a+m行需要打印m個空格、打印1個*、打印2a-(2m+1)個空格、打印1個*、換行。

當打印到2a-(2m+1)<0[2a-2m<1=>m==a]時,則只直接打印換行,結束程序。

不難計算得出,一共需要打印2a+1行(和上面的2b+1相對應)。

示例如下圖,網格里的大點點就是我們需要打印的點:

這樣,偽代碼基本就出來了:

參數:a 橫向的中心點

// 打印上半截

for(n = 0; i <= a; n ++){

// 打印一行內容

for(i = 0; i < a-n; i ++){

print(' ');//打印a-n個空格

}

print('*');//打印1個*

if((2n - 1) < 0){

print('\n');// 未打印空格直接換行

continue;

}

for(i = 0; i < (2n - 1); i ++){

print(' ');//打印2n - 1個空格

}

print('*');// 打印1個*

print('\n');// 換行

}

// 打印下半截

for(m = 1; m <=a; m ++){

for(i = 0; i < m; i ++){

print(' ');// 打印m個空格

}

print('*');// 打印1個*

if(2a-(2m+1) < 0){

print('\n');// 換行

break;// 終止程序

}

for(i = 0; i < 2a-(2m+1); i ++){

print(' ');// 打印2a-(2m+1)個空格

}

print('*');// 打印1個*

print('\n');// 換行

}

以上就思路啦,趕緊去試一試吧~

以上內容只是說明了思路,大家還有什么好方法呢?一起來聊聊吧~

我是一名程序員,更多精彩請關注:空心小窩頭

java語音聊天代碼,如何用c語言for循環打出一個空心菱形