- #include<stdio.h> 
- #define cBYTES_OF_ZENKAKU 3 /*S-JIS全角文字のバイト数。処理系依存*/ 
- #define Limit_of_chara 35 /*11×3+2*/ 
-   
- const int cTOTAL_GYO=11; 
- const char cWHITE_SHIKAKU[]="□"; 
- /* const char cBLACK_SHIKAKU[]="■"; */ 
- const char cZENKAKU_SPACE[]=" "; 
- const char cHANKAKU_SPACE=' '; 
-   
- /*汎用関数。第一引数に未完成のchar配列の中で追記したい位置、第二引数に追記したい文字列(マルチバイト文字など)へのポインタを渡す 
- EOSは最後に1つ追加。第三引数は繰り返し回数*/ 
- void write_in_array(char *archp, const char* const start_of_str, const int role_times){ 
- 	static const char nulmoji = '\0'; 
- 	const char* p_to_str = start_of_str; 
- 	int i; 
- 	for(i=0;i<role_times;i++){ 
- 		while(*p_to_str != nulmoji){ 
- 			*archp = *p_to_str; 
- 			archp++; 
- 			p_to_str++; 
- 		} 
- 		p_to_str = start_of_str; 
- 	} 
- 	*archp = nulmoji; 
- } 
-   
- /*main()より呼び出される*/ 
- void show_top(const int k){ 
- 	int c,kk; 
- 	char arch[Limit_of_chara]=""; 
-   
- 	for(c=1;c<cTOTAL_GYO;c++){ 
- 		kk=c / 2; 
- 		write_in_array(&arch[0], cZENKAKU_SPACE, k-kk); 
- 		if(c % 2==0){ 
- 			arch[(k-kk)*cBYTES_OF_ZENKAKU] = cHANKAKU_SPACE; 
- 			write_in_array(&arch[(k-kk)*cBYTES_OF_ZENKAKU+1], cWHITE_SHIKAKU, c); 
- 		} else { 
- 			write_in_array(&arch[(k-kk)*cBYTES_OF_ZENKAKU], cWHITE_SHIKAKU, c); 
- 		} 
- 	} 
- } 
-   
- /*main()より呼び出される*/ 
- void show_bottom(const int k){ 
- 	char arch[Limit_of_chara]=""; 
- 	write_in_array(&arch[0], cZENKAKU_SPACE, k); 
-    	printf("%s%s\n",- arch ,-  cWHITE_SHIKAKU );
 
- } 
-   
- int main(void){ 
- 	const int k=(cTOTAL_GYO / 2) +1; 
- 	show_top(k);/*樹幹部分の構築*/ 
- 	show_bottom(k);/*幹部分の構築*/ 
- 	return 0; 
- } 
				I2luY2x1ZGU8c3RkaW8uaD4KI2RlZmluZSBjQllURVNfT0ZfWkVOS0FLVSAzIC8qUy1KSVPlhajop5LmloflrZfjga7jg5DjgqTjg4jmlbDjgILlh6bnkIbns7vkvp3lrZgqLwojZGVmaW5lIExpbWl0X29mX2NoYXJhIDM1IC8qMTHDlzMrMiovCgpjb25zdCBpbnQgY1RPVEFMX0dZTz0xMTsKY29uc3QgY2hhciBjV0hJVEVfU0hJS0FLVVtdPSLilqEiOwovKiBjb25zdCBjaGFyIGNCTEFDS19TSElLQUtVW109IuKWoCI7ICovCmNvbnN0IGNoYXIgY1pFTktBS1VfU1BBQ0VbXT0i44CAIjsKY29uc3QgY2hhciBjSEFOS0FLVV9TUEFDRT0nICc7CgovKuaxjueUqOmWouaVsOOAguesrOS4gOW8leaVsOOBq+acquWujOaIkOOBrmNoYXLphY3liJfjga7kuK3jgafov73oqJjjgZfjgZ/jgYTkvY3nva7jgIHnrKzkuozlvJXmlbDjgavov73oqJjjgZfjgZ/jgYTmloflrZfliJco44Oe44Or44OB44OQ44Kk44OI5paH5a2X44Gq44GpKeOBuOOBruODneOCpOODs+OCv+OCkua4oeOBmQpFT1Pjga/mnIDlvozjgavvvJHjgaTov73liqDjgILnrKzkuInlvJXmlbDjga/nubDjgorov5TjgZflm57mlbAqLwp2b2lkIHdyaXRlX2luX2FycmF5KGNoYXIgKmFyY2hwLCBjb25zdCBjaGFyKiBjb25zdCBzdGFydF9vZl9zdHIsIGNvbnN0IGludCByb2xlX3RpbWVzKXsKCXN0YXRpYyBjb25zdCBjaGFyIG51bG1vamkgPSAnXDAnOwoJY29uc3QgY2hhciogcF90b19zdHIgPSBzdGFydF9vZl9zdHI7CglpbnQgaTsKCWZvcihpPTA7aTxyb2xlX3RpbWVzO2krKyl7CgkJd2hpbGUoKnBfdG9fc3RyICE9IG51bG1vamkpewoJCQkqYXJjaHAgPSAqcF90b19zdHI7CgkJCWFyY2hwKys7CgkJCXBfdG9fc3RyKys7CgkJfQoJCXBfdG9fc3RyID0gc3RhcnRfb2Zfc3RyOwoJfQoJKmFyY2hwID0gbnVsbW9qaTsKfQoKLyptYWluKCnjgojjgorlkbzjgbPlh7rjgZXjgozjgosqLwp2b2lkIHNob3dfdG9wKGNvbnN0IGludCBrKXsKCWludCBjLGtrOwoJY2hhciBhcmNoW0xpbWl0X29mX2NoYXJhXT0iIjsKCQoJZm9yKGM9MTtjPGNUT1RBTF9HWU87YysrKXsKCQlraz1jIC8gMjsKCQl3cml0ZV9pbl9hcnJheSgmYXJjaFswXSwgY1pFTktBS1VfU1BBQ0UsIGsta2spOwoJCWlmKGMgJSAyPT0wKXsKCQkJYXJjaFsoay1raykqY0JZVEVTX09GX1pFTktBS1VdID0gY0hBTktBS1VfU1BBQ0U7CgkJCXdyaXRlX2luX2FycmF5KCZhcmNoWyhrLWtrKSpjQllURVNfT0ZfWkVOS0FLVSsxXSwgY1dISVRFX1NISUtBS1UsIGMpOwoJCX0gZWxzZSB7CgkJCXdyaXRlX2luX2FycmF5KCZhcmNoWyhrLWtrKSpjQllURVNfT0ZfWkVOS0FLVV0sIGNXSElURV9TSElLQUtVLCBjKTsKCQl9CgkJcHJpbnRmKCIlc1xuIiwgYXJjaCk7Cgl9Cn0KCi8qbWFpbigp44KI44KK5ZG844Gz5Ye644GV44KM44KLKi8Kdm9pZCBzaG93X2JvdHRvbShjb25zdCBpbnQgayl7CgljaGFyIGFyY2hbTGltaXRfb2ZfY2hhcmFdPSIiOwoJd3JpdGVfaW5fYXJyYXkoJmFyY2hbMF0sIGNaRU5LQUtVX1NQQUNFLCBrKTsKICAgCXByaW50ZigiJXMlc1xuIixhcmNoLCBjV0hJVEVfU0hJS0FLVSk7Cn0KCmludCBtYWluKHZvaWQpewoJY29uc3QgaW50IGs9KGNUT1RBTF9HWU8gLyAyKSArMTsKCXNob3dfdG9wKGspOy8q5qi55bm56YOo5YiG44Gu5qeL56+JKi8KCXNob3dfYm90dG9tKGspOy8q5bm56YOo5YiG44Gu5qeL56+JKi8KCXJldHVybiAwOwp9