空心菱形是算法入门的基础题目,做出这道题并没有什么难度,但是下面的代码是根据网上的一些讨巧的方法写出来的,思想值得借鉴。
int _tmain(int argc, _TCHAR* argv[])
{
int num;
int fk = 0, mk = 0;
scanf("%d",&num);
//取得空格数和行数的关系,上半部分正着数是i,下半部分倒着数是n-i
for (int i = 1; i <= num;i++)
{
//上半部分
if (i < (num + 1) / 2)
{
//前部空格数
fk = (num + 1) / 2 - i;
//中部空格数
mk = 2*i - 3;//从第二行开始
}
//下半部分
else
{
fk = i - (num + 1) / 2;
mk = 2 * (num - i) - 1;
}
for (int m = 1; m <= fk; m++)
printf(" ");
printf("*");
for (int n = 1; n <= mk; n++)
printf(" ");
//不是第一行也不是最后一行,需要在每行末尾添加*
if (i > 1 && i < num)
{
printf("*");
}
printf("
");
}
//你会发现,这种算法直接忽略了后面的空格部分,但是在显示上却没有区别。
system("pause");
return 0;
}