#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