【问题标题】:Find first N pentagonal numbers找出前 N 个五边形数
【发布时间】:2011-11-11 15:06:39
【问题描述】:

我必须从 1-100 中找到第一个 N [pentagonal numbers][1] 并每行显示 10 个。我也必须使用getPentagonalNumber(int n) 方法;这显然是它存在的原因。

这是我目前的代码。

package chapter_5;

public class Five_One {

    public static void main(String[] args) {
        int n = 0;
        int numPerLine = 10;
        for ( n = 0;  n < 11;  n ++)           
    }

    public static int getPentagonalNumber(int n) {
        int formula = n * (3 * n - 1) / 2;
        while ( formula < )
    }
}

【问题讨论】:

  • 你的>>具体
  • 嗯,我真的认为我不应该帮助你......道德的东西。但我会帮助您,以便您可以稍微编辑此代码。首先,您必须打印数字,以免在某处丢失 println。您还需要像 for inside de 这样的重复结构,因此每行打印 10 个数字。使用 print(number + " ") 并且当计数器达到 10 时使用 print(\n)
  • 您必须为 1 到 n 之间的每个值计算公式。为此,您必须在 while 内计算公式。我可以给你的第一个提示:不要修改参数的值,换句话说,避免使用n++ 使用其他变量来进行增量。 i 变量经常在循环中使用。

标签: java methods for-loop


【解决方案1】:

这还有很长的路要走。让我们在这里用更好的方法来分解它。

让我们创建一个返回一组五边形数字的方法(我们将使用一个数组。)如果可能还有额外的功劳,这允许我们稍后使用该方法!

我们的签名是这样的:

class Jason {

    public static void main(String[] args) {
        // don't mix the calc routine and printing...
        int[] pents = getPentagonals(100); // calcs and stores the first 100 values

        final int numPerLine = 10;
        for(int i = 0; i < pents.length; i++) {
            System.out.print(pents[i]);
            System.out.print(" ");
            if(i % numPerLine == numPerLine - 1) System.out.println("");
        }
    }

    static int[] getPentagonals(int n) {
        int[] pents = new int[n];
        // calculate pents
        for(int i = 0; i < pents.length; i++) {
            // calculate the ith pentagonal here (assuming the 0th is first)
            // store it in pent[i]
        }
        return pents;
    }

}

【讨论】:

  • i % numPerLine = numPerLine - 1 缺少=
  • @xanatos 不错。值得庆幸的是,这是被 ide 捕获的东西,并且编译器在那里失败了。另外,你有足够的代表,你可以编辑它:-)
  • 如果我触摸您的代码,我将需要手套 :-) 我是 always use {} 教派和 no blank lines between } and } and no blank lines after { 支持小组的成员。几乎是另一个世界 :-) 它仍然是 +1,因为它很好且格式正确,带有小写变量:-)
  • @xanatos 很公平。我的阵营认为,如果它足够短,可以放在一条线上,那么这样做是可以接受的。而且我不是空行的忠实粉丝,除非它们在类声明之前或之后。但这只是风格问题,而不是它是否会编译的问题。 :-)(嘿,押韵。太棒了。)
  • 感谢您的帮助,虽然我觉得自己有点迟钝,因为我仍然被难住了!当我尝试 n=0; 时,我遇到的问题是以某种方式为 n 添加一个数值;然后加一以执行公式 n*(3*n-1)/2 直到 n=10;我不能,因为在公共静态 int getPentagonalNumber(int n) n 已经分配,​​我希望我什至有意义
【解决方案2】:

请注意,您只执行了一次公式,然后将其递增直到得到 101。所以您基本上完成了:100 * (3 * 100 - 1) / 2 = 14950。

考虑让 getPentagonalNumber 返回一个值,然后调用它 x 次,从 1 开始递增值,直到你得到一个大于 100 的值或直到你根据你的要求完成了 100 次。

【讨论】:

    【解决方案3】:

    我认为我的结构方式是让getPentagonalNumber(int n) 返回nth 五边形数——一次只计算一个。这使它易于理解和测试。担心在main 函数中编译它们的列表,该函数可以调用您的getPentagonalNumber 函数。

    您可能希望将主函数存储结果放入List。当列表.size() == 10 时,调用printResults(theResultList)(您将使用当前main 中的一些代码编写)和.clear() 列表。尤其是刚开始时,保持功能小且职责明确分开将有助于您跟踪代码正在做什么。

    【讨论】:

      【解决方案4】:

      不应该是return formula; 而不是return n;,因为我假设您正在尝试将答案返回到您的计算中?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-10
        • 2020-06-08
        • 1970-01-01
        • 1970-01-01
        • 2016-03-27
        相关资源
        最近更新 更多