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

时间:2018-10-23 17:24:50

标签: java series

实施求和级数时,所需的输出会发生变化。

问题是:

莉莉(Lily)有一条巧克力棒,她想与罗恩(Ron)生日分享。每个正方形上都有一个整数。她决定共享所选条形的连续段,以使段的长度与Ron的出生月份相匹配,并且平方上的整数之和等于他的出生日期。您必须确定她可以分割巧克力的几种方式。

将巧克力棒视为正方形s=2,2,1,3,2的阵列。她想查找汇总到罗恩(Ron)生日d=4的段,其长度等于他的出生月份m=2。在这种情况下,有两个满足她条件的细分:2,23,1

功能描述

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

生日具有以下参数:

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

输入格式

第一行包含一个整数n,即巧克力条中的平方数。 第二行包含以空格分隔的整数s[I],即巧克力方块上的数字。 第三行包含两个用空格分隔的整数md,分别是罗恩的生日和出生月份。

输出格式

打印一个整数,表示莉莉分配巧克力棒与罗恩分享的方式总数。

示例输入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项?

2 个答案:

答案 0 :(得分:1)

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

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)个元素

答案 1 :(得分:0)

尝试一下

//n - amount of bars
//s - array of bars (s[i] - weight of each bar)
//d - Ron's birthday
//m - Ron's birthmonth

int answer = 0;
 // iterate bars
for (int k = 0; k < s.length; k += 1) {
     int sum = 0;
     // iterate bars month times
     for (int j = i; j < m + i; j += 1) {
         // count sum of weights month times
         sum += s[j];
     }
     // if counted sum is equal to amount of days
     // then it's +1 to possible ways!
     if (sum == d) {
        answer += 1;
     }
}