Quando a série soma é implementado, há uma mudança na saída desejada.
O problema é:
Lily tem uma barra de chocolate que ela quer compartilhá-lo com Ron para o seu aniversário. Cada um dos quadrados tem um inteiro nele. Ela decide compartilhar um segmento contíguo da barra selecionado tal que o comprimento do segmento corresponde mês de nascimento de Ron e a soma dos inteiros nos quadrados é igual ao seu dia de nascimento. Você deve determinar quantas maneiras ela pode dividir o chocolate.
Considere a barra de chocolate como uma matriz de quadrados, s=2,2,1,3,2
. Ela quer encontrar segmentos somando-a-dia do nascimento de Ron, d=4
com um comprimento de igualar o seu mês de nascimento, m=2
. Neste caso, existem dois segmentos de conhecê-la critérios: 2,2
e 3,1
.
Descrição da função
Completar a função de aniversário no editor abaixo. Ele deve retornar um inteiro denotando o número de maneiras Lily pode dividir a barra de chocolate.
Aniversário tem o seguinte parâmetro (s):
s
: Um array de inteiros, os números em cada um dos quadrados de chocolate
d
: um inteiro, dia do nascimento de Ron
m
: um inteiro, mês do nascimento de Ron
Formato de entrada
A primeira linha contém um inteiro n, o número de quadrados na barra de chocolate. A segunda linha contém inteiros separados por espaços s[I]
, os números nos quadrados de chocolate onde. A terceira linha contém dois inteiros separados por espaços, m
e d
, dia do nascimento de Ron e seu mês de nascimento.
Formato de saída
Imprimir um inteiro indicando o número total de maneiras que Lily parte lata sua barra de chocolate para compartilhar com Ron.
Entrada de amostra 0
5
1 2 1 3 2
3 2
Exemplo de saída 0
2
E o meu código em 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);
}}
Recebo saída como 3 em vez de 2. Como a soma de até que os d
termos?
Em seu algoritmo (mostrado abaixo), você está verificando a soma antes do loop interno terminou:
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);
}}
Você deve fazê-lo como tal,
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);
}}
No entanto, mesmo a solução acima está faltando um caso extremo. Você está inicializando sua matriz nomeado como uma matriz de comprimento 1000 que irá introduzir erros em seu código. Por exemplo, considere o seguinte input
5
1 2 1 3 2
2 2
agora desde sua matriz um é algo como o seguinte:
1 2 1 3 2 0 0 0 0 ... //till length 1000
seu algoritmo irá responder da seguinte forma como resposta válida. quando na realidade não há nenhum:
1 2 1 3 [2 0] 0 0 0 ... //till length 1000
Portanto, o seu exterior para o laço só deve ir até o (nd) th elemento