Как добавить серии чисел в Java - PullRequest
0 голосов
/ 23 октября 2018

Когда серия суммирования реализована, происходит изменение желаемого результата.

Проблема в том, что

У Лили есть шоколадная плитка, которую она хочет поделиться с Роном своимдень рождения.Каждый из квадратов имеет целое число.Она решает разделить непрерывный сегмент выбранного столбца так, чтобы длина сегмента соответствовала месяцу рождения Рона, а сумма целых чисел на квадратах равна его дню рождения.Вы должны определить, сколько способов она может разделить шоколад.

Рассмотрите плитку шоколада как массив квадратов, s=2,2,1,3,2.Она хочет найти отрезки, суммирующие день рождения Рона d=4 с длиной, равной месяцу его рождения m=2.В этом случае есть два сегмента, соответствующих ее критериям: 2,2 и 3,1.

Описание функции

Завершите функцию дня рождения в редакторе ниже.Он должен вернуть целое число, обозначающее количество способов, которыми Лили может делить плитку шоколада.

У дня рождения есть следующие параметры:

s: массив целых чисел, числа накаждый из квадратов шоколада
d: целое число, день рождения Рона
m: целое число, месяц рождения Рона

Формат ввода

Первая строка содержитцелое число n, число квадратов в плитке шоколада.Вторая строка содержит разделенные пробелом целые числа s[I], числа на шоколадных квадратах где.В третьей строке записаны два целых числа через пробел: m и d, день рождения Рона и месяц его рождения.

Формат вывода

Выведите целое число, обозначающее общее число способов, которымиЛили может порционировать свою плитку шоколада, чтобы поделиться с Роном.

Пример ввода 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 голосов
/ 23 октября 2018

В вашем алгоритме (показан ниже) вы проверяете сумму до завершения внутреннего цикла:

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 должен идти только до (nd) -го элемента

0 голосов
/ 23 октября 2018

Попробуйте,

//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;
     }
}
...