两个小时写的两行代码(打印菱形问题)
看有人问输出菱形块的问题,用格式字符串写了这两行花了整整两个多小时,看来还是不够熟练
辛苦成果忍不住拿来秀一下,明天来把注释加上
/************************************************
今天加上注释(printf函数*的使用)
算法说明:
把printf函数作为一个m的函数f(m),用两个字符串拼成
每行要输出的格式,一个字符串是空格字符组成,另一个
存放*号,因为字符无法重用,所以每个字段都加上了
字符串结束符。
为了方便思考,所有的位置控制都用m控制。
而m是循环变量i的一个映射。这个映射就想了有一个小时。
对于i从1到7,m分别是1,2,3,4,3,2,1
借助整数除法不进行四舍五入的特性,终于找到下面
一个式子表示这个折线:
m=i-(i/4)×(i mod 4)×2
************************************************/
#include<stdio.h>
int main()
{
int i,m;
for(i=1,m=1;i<8;i++,m=i-(i/4)*(i%4)*2)
printf("%*s%*s\n",4-m," "+m-1,2*m-1,"*\0* *\0* *\0* *"+m*(m-1));
return 0;
}
[[it] 本帖最后由 moonwalker 于 2008-4-20 10:05 编辑 [/it]]