精确整数的保守整数

 收藏

我编写了一个简单的程序-带和的保守序列整数,例如输入:15,输出应为1、2、3、4、5

我用c ++编写了该程序,并成功运行,如下所示:

#include <iostream>
#include <string>
using namespace std;

int main() {
    int num, i, j, k;
    int sum = 0;

    cout << "Num? ";
    cin >> num;

    for (i = 1; i <= num/2+1; i++) {
        j=i;
        while(sum<num) {
                     sum = sum + j;
                     j++;}
        if (sum==num) {
                      for (k = i; k < j; k++)
                      if (!k) {
                      cout << "Not an exact sum!";
                      }
                      else {
                      cout << " " << k;
                      }
        }
    }
    cout << endl;

    system("pause");
    return 0;
}

但是,问题是我将其翻译成Java,但没有用。看到下面的Java代码,有什么建议吗?

import java.util.Scanner;
public class Week2 {
  public static void main(String[] args) 
  {
    Scanner keyboard = new Scanner(System.in);
    System.out.println("Type an integer:");
    int n = keyboard.nextInt();

    // write your code here; k is the result of the computation //
    int i, j = 0, k;
    int sum = 0;

    for (i = 1; i <= n/2+1; i++)
        j = i;
    while(sum < n)
        sum = sum + j;
        j++;
    if (sum == n)
        for (k = i; k < j; k++)

    // do not modify anything beyond this comment //

    if (k == 0)
      System.out.println("The number "+n+" is not an exact sum");
    else
      System.out.println("The number "+n+" is the sum of integers from 1 to "+k);
  }
}
回复
  • 燕晓彤 回复

    有效!但是输出不是我期望的。

    import java.util.Scanner;
    public class Week2 {
      public static void main(String[] args) 
      {
        Scanner keyboard = new Scanner(System.in);
        System.out.println("Type an integer:");
        int n = keyboard.nextInt();
    
        // write your code here; k is the result of the computation //
        int i, k;
        int sum = 0, j = 0;
    
        for (i = 1; i <= n/2+1; i++) {
            j = i;
        while(sum < n) {
            sum = sum + j;
            j++;
        }
        if (sum == n) {
            for (k = i; k < j; k++)
    
        // do not modify anything beyond this comment //
    
        if (k == 0)
          System.out.println("The number "+n+" is not an exact sum");
        else
          System.out.println("The number "+n+" is the sum of integers from 1 to "+k);
      }
    }}}
    

    输出应该只是一行:数字n是1到k的整数之和。 而不是下面的这些多行

    输入一个整数: 15 数字15是1到1的整数之和 数字15是1到2的整数之和 数字15是1到3的整数之和 数字15是1到4的整数之和 数字15是1到5的整数之和

  • id_aut 回复

    它没有用

    请解释。在执行程序(包括其输出)时显示控制台,并说明问题所在。

    我看到的一个可能的问题是,该代码没有使用大括号在if和while语句中包含代码。最好始终使用它们,这样就不会混淆if&while语句范围内的哪些语句以及哪些不是。所发布代码的缩进形式使人们对某些语句的预期位置有所怀疑。

  • zrerum 回复

    我认为您没有解决问题的正确算法。您能否写出伪代码来解决问题并将其发布,以便我们可以看到您认为逻辑应该是什么。

    为了进行测试,如果输入14,应该打印什么?

  • Edie 回复

    是的,我了解“ {}”

    如果您希望任何人使用您的代码,建议您对其进行修复。

    程序输出的最后一行是否正确?是否有四行打印错误的问题?

    尝试进行一些调试,以查看为什么要打印其他四行。

  • Alex55 回复

    是的,我了解{}

    假设我输入以下内容:15 输出应如下所示

    数字15是1到5的整数之和

    该程序定义为保守数字的总和,因此1 + 2 + 3 + 4 + 5 = 15

  • ramet 回复

    好吧,我固定了一切!除了

    System.out.println(“数字” + n +“不是精确的和”“);

    不管用。当我输入5时,显示“数字5是1到3的整数之和”,这是不对的。有什么建议么?

    import java.util.Scanner;
    public class Week2 {
      public static void main(String[] args) 
      {
        Scanner keyboard = new Scanner(System.in);
        System.out.println("Type an integer:");
        int n = keyboard.nextInt();
    
        // write your code here; k is the result of the computation //
        int k = 0;
        int sum = 0;
    
        while(sum < n/2+1) {
            sum += k;
            k++;
            StringBuffer sb = new StringBuffer(k);
            sb.append(k);
        }
    
        // do not modify anything beyond this comment //
    
        if (k == 0)
          System.out.println("The number "+n+" is not an exact sum");
        else
          System.out.println("The number "+n+" is the sum of integers from 1 to "+k);
      }
    }
    

  • shawphy 回复

    即使线程被标记为已解决,我也要指出代码中的算法如NormR1所说是错误的。

    1)第13行,因为总和值应该与n值而不是一半的值进行比较,所以它会提前结束循环。 2)第22行,此处的比较应在总和与n之间。如果和&n相等,则存在一组累加的整数,它们可以累加到n值;否则,没有答案。

  • lsint 回复

    第15行,while循环的大括号在哪里?如果没有它,它将永远只执行sum = sum + j...。此外,Java代码中的其他if语句/ for循环也没有大括号来定义范围...

  • 伊筱沫 回复

    Java关于花括号和块的规则几乎与C ++相同,因此,如果您确实编写了C ++代码,则应了解为什么Java版本已被破坏。

  • qqgsd 回复

    有没有显示最后一个整数的函数?

    “最后一个”整数是哪个整数?

    在第17行的for循环中应该包含哪些语句? 第17行之后的行没有缩进,就像它们与第17行处于同一逻辑级别一样。

    我认为您没有解决问题的正确算法。您能否写出伪代码来解决问题并将其发布,以便我们可以看到您认为逻辑应该是什么。

  • 鸣人 回复

    我修好了它。但是我仍然无法弄清楚输出。有没有显示最后一个整数的函数?

    import java.util.Scanner;
    public class Week2 {
      public static void main(String[] args) 
      {
        Scanner keyboard = new Scanner(System.in);
        System.out.println("Type an integer:");
        int n = keyboard.nextInt();
    
        // write your code here; k is the result of the computation //
        int k;
        int sum = 0, j = 1;
    
        while(sum < n) {
            sum += j;
            j++;
        }
        for (k = 1; k < j; k++)
    
        // do not modify anything beyond this comment //
    
        if (k == 0)
          System.out.println("The number "+n+" is not an exact sum");
        else
          System.out.println("The number "+n+" is the sum of integers from 1 to "+k);
      }
    }
    

  • aeius 回复

    发布代码的格式需要工作:

    在同一行上编码多个'}}}使得难以阅读和理解代码的逻辑。 每个“}”应位于其自己的行上,并垂直于该行的开头下方,并带有“ {”对

    while或if语句中的行应缩进3-4个空格,以显示逻辑的嵌套。

    输出不是我期望的。

    请说明并显示您希望输出的内容。