java - 如何在Java中添加一系列数字

标签 java series

当实现求和系列时,所需的输出会发生变化。

问题是:

Lily 有一 block 巧克力,她想和 Ron 一起分享它作为他的生日礼物。每个方 block 上都有一个整数。她决定共享所选条形的连续部分,以便该部分的长度与 Ron 的出生月份相匹配,并且正方形上的整数之和等于他的出生日期。您必须确定她可以分多少种巧克力。

将巧克力棒视为正方形数组,s=2,2,1,3,2。她想找到总计到 Ron 的生日 d=4 且长度等于他的出生月份 m=2 的片段。在本例中,有两个片段满足她的条件:2,23,1

功能说明

在下方编辑器中完成生日功能。它应该返回一个整数,表示 Lily 可以划分巧克力 block 的方式数。

生日有以下参数:

s:一个整数数组,每个巧克力方 block 上的数字
d:一个整数,罗恩的生日
m:整数,罗恩的出生月份

输入格式

第一行包含一个整数 n,表示巧克力 block 中的方 block 数。 第二行包含以空格分隔的整数 s[I],即巧克力方 block 上的数字所在的位置。 第三行包含两个用空格分隔的整数,md,罗恩的出生日期和出生月份。

输出格式

打印一个整数,表示 Lily 可以分配她的巧克力 block 与 Ron 分享的方式总数。

示例输入 0

5
1 2 1 3 2
3 2

示例输出 0

2

还有我的java代码

import java.io.*;
import java.math.*;
import java.security.*;
import java.text.*;
import java.util.*;
import java.util.concurrent.*;
import java.util.function.*;
import java.util.regex.*;
import java.util.stream.*;

import java.util.Scanner;
public class Solution {

public static void main(String args[])
{
  int a[] = new int[1000];
  Scanner s=new Scanner(System.in);
  int sum=0,count=0;
  int n=s.nextInt();
  for(int i=0;i<n;i++)
  {
    a[i]=s.nextInt();
  }
  int m=s.nextInt();
  int d=s.nextInt();
  for(int i=0;i<n;i++){ 
    for(int j=i;j<d+i;j++)
    {
      sum=sum+a[j];
      if(sum==m)
      {
        count++;

      }
    }sum=0; 
  }
  System.out.println(count);
}}

我得到的输出是 3 而不是 2。 如何对 d 项求和?

最佳答案

在您的算法中(如下所示),您在内循环结束之前检查总和:

import java.io.*;
import java.math.*;
import java.security.*;
import java.text.*;
import java.util.*;
import java.util.concurrent.*;
import java.util.function.*;
import java.util.regex.*;
import java.util.stream.*;

import java.util.Scanner;
public class Solution {

public static void main(String args[])
{
  int a[] = new int[1000];
  Scanner s=new Scanner(System.in);
  int sum=0,count=0;
  int n=s.nextInt();
  for(int i=0;i<n;i++)
  {
    a[i]=s.nextInt();
  }
  int m=s.nextInt();
  int d=s.nextInt();
  for(int i=0;i<n;i++){ 
    for(int j=i;j<d+i;j++)
    {
      sum=sum+a[j];
      //THIS CHECK SHOULD BE OUTSIDE THE CURRENT FOR LOOP
      if(sum==m)
      {
        count++;

      }
    }sum=0; 
  }
  System.out.println(count);
}}

你应该这样做,

import java.io.*;
import java.math.*;
import java.security.*;
import java.text.*;
import java.util.*;
import java.util.concurrent.*;
import java.util.function.*;
import java.util.regex.*;
import java.util.stream.*;

import java.util.Scanner;
public class Solution {

public static void main(String args[])
{
  int a[] = new int[1000];
  Scanner s=new Scanner(System.in);
  int sum=0,count=0;
  int n=s.nextInt();
  for(int i=0;i<n;i++)
  {
    a[i]=s.nextInt();
  }
  int m=s.nextInt();
  int d=s.nextInt();
  for(int i=0;i<n;i++){ 
    for(int j=i;j<d+i;j++)
    {
      sum=sum+a[j];
    }

      if(sum==m)
      {
        count++;

      }
    sum=0; 
  }
  System.out.println(count);
}}

但是,即使是上述解决方案也缺少边缘情况。您正在将名为 a 的数组初始化为长度为 1000 的数组,这将在您的代码中引入错误。例如考虑以下输入

5
1 2 1 3 2
2 2

现在因为你的数组 a 看起来像下面这样:

1 2 1 3 2 0 0 0 0 ... //till length 1000

您的算法将给出以下答案作为有效答案。而实际上没有:

1 2 1 3 [2 0] 0 0 0 ... //till length 1000

所以你的外层 for 循环应该只执行到第 (n-d) 个元素

关于java - 如何在Java中添加一系列数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52954675/

相关文章:

java - 我如何在 Jersey 中使用自定义验证

java - 如何处理 httpclient 4.3+ 中的超时?

java - 系列代

python - 我在 Pandas 系列中这样做时的值(value)在哪里

c# - 添加的图表系列点与 X 轴不同步

java - 无法解析自定义日期格式。 ( java )

java - 防止加速器在输入子项时触发

java - 为什么 short 原始类型明显比 long 或 int 慢?

python - 如何防止.apply更改 boolean Pandas 系列的dtype

python - 使用切片和数据帧系列作为结尾的子字符串