【问题标题】:How does this "print a heart" program work in C?这个“打印心脏”程序如何在 C 中工作?
【发布时间】:2013-09-27 04:31:06
【问题描述】:

我在互联网上的某个博客上偶然发现了这段代码。这是一个非常有趣的程序,但我一直试图弄清楚该程序实际上是如何工作的,从那时起我就一直坚持下去。我只是不明白程序如何打印对称性。心的一半是印出来的,另一半是通过镜像复制的吗?如果有人能帮我弄清楚逻辑,我将不胜感激。提前致谢。

//Include Headers.
#include <stdio.h>
#include <math.h>
int main()
{
    int x, y, size=20;
    for (x=0; x<size; x++)
    {
        for (y=0; y<=4*size; y++)
        {
            double dist1 = sqrt( pow(x-size,2) + pow(y-size,2) );
            double dist2 = sqrt( pow(x-size,2) + pow(y-3*size,2) );
            if (dist1 < size + 0.5 || dist2 < size + 0.5 )
                 printf("%c",97);
            else
                 printf(" ");
        }
        printf("\n");
    }
    for (x = 1; x <= 2*size; x++)
    {
        for (y=0; y<x; y++)
        printf(" ");
        for (y=0; y<4*size + 1 - 2*x; y++)
            printf("%c",86);
        printf("\n");
    }

    return 0;  
}

【问题讨论】:

  • 您的问题的一个相当简单的答案就在您的代码中。不要打印星号,而是打印 dist1dist2 值,每行一对。
  • 任何图片解释都会有所帮助。
  • 对于那些对解决这个问题非常感兴趣的人,您似乎没有看过代码或通过调试器运行它。关于对称性的问题的答案在于 printf("\n"); 在 x 循环内...
  • ideone.com/YYQ075 -- 在我看来,它更像是两条抛物线或半圆和一个三角形,只是模糊地像一颗心。如果我要提醒她喂猫,我绝对不会写在给我妻子的便条上。

标签: c++ c logic ascii


【解决方案1】:

不,这对利用对称性没有多大作用。

大概你关心的部分是心脏的上半部分,因为下半部分只是一个基本的三角形。

上半部分的计算相当简单。虽然它们通常会因为字符单元格不是正方形而变形,但它基本上所做的只是绘制两个半径为size 的半圆。因此,它为每个半圆选择中心点,然后计算从中心到当前点的距离(基本毕达哥拉斯公式)。如果该距离小于距任一圆中心的所选半径,则打印a。否则打印一个空格。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-22
    • 2011-02-24
    • 1970-01-01
    • 1970-01-01
    • 2021-06-25
    • 2021-03-01
    相关资源
    最近更新 更多