C语言硬核编程之勾勒空心菱形
今天这篇文章我主要为独特硬核写法之数学艺术,这是属于C语言中基础问题,如果你对C语言基础知识还不熟悉话,可以关注下专栏教程或者自己找本书籍学习一下即可哦。还有就是这篇文章没有什么实际应用价值,只是单纯的让你重视下数学知识哦!
写一个控制台程序,用户输入内层和外层菱形的高度,输出一个空心菱形,菱形的高度定义为菱形的上三角形的高度,如输入5和3,输出如下:
int main(){
int star = 0, empty = 0;
int num_empty = 0, num_star=0;
int m = 5, n = 3;
for (int i = 1; i < 2 * m; i++)
{
if (i <= m - n) {
star = 2 * i - 1;
empty = m - i;
while (empty--)
printf(" ");
while (star--)
printf("*");
}
else if (m - n < i && i < m + n && j < 2 * n) {
if (j <= n && i <= m) {
num_empty = 2 * j - 1;
empty = m - i;
}
else {
num_empty = 2 * (2 * n - 1 - (j - 1)) - 1;
empty = i - m;
}
num_star = star = m - n;
while (empty--)
printf(" ");
while (star--)
printf("*");
while (num_empty--)
printf(" ");
while (num_star--)
printf("*");
j++;
}
else {
star = 2 * (2 * m - 1 - (i - 1)) - 1;
empty = (2 * m - 1 - star) / 2;
while (empty--)
printf(" ");
while (star--)
printf("*");
}
printf("\n");
}
return 0;
}
看完后是否感觉比第一种的实现优雅了很多呢。
(+x) + (+y) < m
(-x) + (+y) < m
(+x) + (-y) < m
(-x) + (-y) < m
合并后的表达式为:abs(x)+abs(y)<m,此时的程序示意如下:
不知大家看到这段代码是怎样的感觉,有没有被数学美给震撼了。如果大家也有相同的感觉,那你可以好好学习下数学吧,如果你想在编程的这条荆棘路上走的更高高更远,好好数学和物理也是很有必要的哦。