抱歉,我对编码有点陌生,但我被要求将一个整数作为第 n 项的输入并打印出此模式中的值,并且我已经编写了一些有效的东西,但我觉得好像我我把事情严重复杂化了。这是有问题的系列:
y = -(1)-(1+2)+(1+2+3)+(1+2+3+4)-(1+2+3+4+5) .... (1+2 +3+4...+n)
这是代码:
import java.util.Scanner;
public class wontwork {
public static void main(String[] args) {
Scanner np = new Scanner(System.in);
System.out.println("Enter n");
int n = np.nextInt();
int count = 1;
int sum = 0;
int y = 0;
for(int i = 1; i<=n ; i+=2) {
if(count%2==0) {
sum+=i;
y+=sum;
sum+=i+1;
y+=sum;
}
else {
sum+=i;
y-=sum;
sum+=i+1;
y-=sum;
}
count++;
}
if(n%2!=0) {
if (count%2==0) {
System.out.print(y+sum);
}
else {
System.out.print(y-sum);
}
}
else {
System.out.print(y);
}
np.close();
}
}
当输入 4 时,样本输出应给出 12;当输入 5 时,样本输出应给出 -3。
据我了解,它是减去两次并加上两倍的值之和。我所做的是创建一个 for 循环并采用一个计数变量来检查是否首先添加或减去,具体取决于它是奇数还是偶数,然后采用 sum 变量来计算括号之间每次迭代的值并添加或将其减去 y。
但每次循环运行时,这个过程都会发生两次。因此,当计数为奇数时,y 在第一个循环中添加 -(1) 和 -(1+2),然后在下一个循环中,当计数为奇数时,y 添加 (1+2+3) 和 (1+2+3+4)甚至。我这样做是因为如果我单独添加 (1+2+3) 计数为偶数,我还必须添加 (1+2+3+4) 并增加计数,但是,这使它成为奇数,并且它是对于使用它进行加法或减法不再有用。如果我错过了一些明显的东西,我会很讨厌,但我一生都无法弄清楚如何才能知道它何时增加两次,然后使其为正值或负值。
出于这个原因,如果不是最后的 if else 语句,程序只会为每个 2n 输出正确的值,并修复我获取最后存储的总和值并检查 count 是奇数还是偶数,然后添加或再次减去 y it 即可找到 n 的中间值。由于这是我在这里发表的第一篇文章,如果我没有错误地编写或格式化任何内容,请道歉,但请让我知道我还能做什么。我将不胜感激任何帮助。
看起来您想要减去两项,添加两项,减去两项,最终根据需要减去或添加一项或两项。
在我看来,最简单的方法是使用
arithemetic sum formula
for 1 + 2 + 3 + 4 .. + n ,即((n+1)*n)/2
。当i
变成偶数时,反转符号。印刷
在您的代码中,您为什么选择
i += 2
?它使您的代码变得复杂。这是一个更简单的代码。它将正常工作。
如果我错了,我很抱歉
这从建模问题开始。忽略 y = 并查看每个步骤的作用:在步骤 0 处,-1。在步骤-1。在步骤 1 中,-(1+2)。在步骤 2 处,+(1+2+3),在步骤 3 处,+(1+2+3+4)。在第 4 步,-(1+2+3+4+5) 等,因此在每一步 i 我们将 1 到 i+1 求和,因此我们需要一个简单的语句来告诉我们符号需要是什么,而无需跟踪它:0=-、1=-、2=+、3=+、4=-等,因此循环每 4 个步骤重复一次,因此我们从 i % 4 开始,它始终是正数,我们需要 2 项是负数,所以
i % 4 - 2
- 除了会给我们 -1、+1或 0作为可能的符号,所以我们稍微偏置一下,现在我们i % 4 - 1.99
将得到 0、1 和 -1 或 +1分别为2、3。然后,我们可以计算总和中的每个步骤,得出
y
: