0

我在为我的 Java 课程分配家庭作业时遇到了一些麻烦。在其中,我们应该采用 1 到 13 之间的整数并显示三个由数字组成的不同三角形。例如,如果我输入 5,结果将是:

三角形 1

     1
     2  3
     4  5  6
     7  8  9 10
    11 12 13 14 15

三角形 2

    1
    2 6
    3 7 10
    4 8 11 13
    5 9 12 14 15

三角 3

               5
            4  9
         3  8 12
      2  7 11 14
    1 6 10 13 15

我已经让第一个三角形运行良好,但我最担心的是第二个三角形。第三个我还没试过。另一件事是我的教授对我们在创建项目时使用的方法很挑剔。换句话说,我们只能使用他教给我们的东西。他告诉我们使用 System.out.printf("%3d", n) 语句来分隔字符,我们必须在单独的类中创建它们。

第一个三角形的代码如下:

    void triangle1(int n)
    {
        int k = 1;
        for (int i = 1; i <= n; i++)
        {
            for (int j = 0; j < 1; j++)
            {
                System.out.printf("%3d", n);
                k += 1;
            }

            System.out.println();
        }
    }

所以,几乎,我需要遵循这个标准来创建另外两个三角形,但我真的被第二个困住了,我不知道从哪里开始。任何帮助都感激不尽!

4

3 回答 3

0

这是我接近它的方式。

程序一次打印一行,您不能打印半行然后开始打印另一行。

话虽如此,您应该识别三角形中的模式。

1
2 6
3 7 10
4 8 11 13
5 9 12 14 15

您有第一个数字n,然后您会看到下一行以 . 开头n + 1。行中开始的下一个数字是(n + 1) + twhere t = 4。那里有一个模式。

第三行遵循相同的模式。第一个数字是(n + 1)然后您可以通过以下方式计算其他数字+ (t - 1)

这可以通过一个 for 循环来完成,就像你第一次做的那样。

对于最后一个三角形,您可以使用相同的过程,只需更改符号,t 将等于不同的值。

算法写作是关于识别模式的。

于 2013-10-17T21:29:41.023 回答
0

如果您仔细观察,您会发现每个数字与给定行后面的数字之间存在重复模式。

3 7 10 =>       [3 & 7 differ by 4][7 & 10 differ by 3]
4 8 11 13 =>    [4 & 8 differ by 4][8 & 11 differ by 3][11 & 13 differ by 2]
5 9 12 14 15 => [...   differ by 4][...           by 3][...            by 2][... by 1]

您可以使用该信息来制作第二个三角形。我会把剩下的留给你。我希望这会有所帮助!

于 2013-10-17T21:30:01.547 回答
0

看来您是 CS 学生,因此我不会提供完整的解决方案。我会给你一些提示,我将如何解决这个问题。

这是 print 语句必须做的:

对于 i=1 j=0 打印 1

对于 i=2 j=0 打印 2

对于 i=2 j=1 打印 6

对于 i=3 j=0 打印 3

对于 i=3 j=1 打印 7

对于 i=3 j=2 打印 10

找到一个从 i 和 j 计算正确输出的公式,它是一个简单的线性组合。

于 2013-10-17T21:30:23.923 回答