Member 12156949 Ответов: 1

Шеф-повар и сумма с префиксом и суффиксом(получение некоторого тестового случая не удалось)


Our little chef is fond of doing additions/sums in his free time. Today, he has an array A consisting of N positive integers and he will compute prefix and suffix sums over this array.

He first defines two functions prefixSum(i) and suffixSum(i) for the array as follows. The function prefixSum(i) denotes the sum of first i numbers of the array. Similarly, he defines suffixSum(i) as the sum of last N - i + 1 numbers of the array.

Little Chef is interested in finding the minimum index i for which the value prefixSum(i) + suffixSum(i) is the minimum. In other words, first you should minimize the value of prefixSum(i) + suffixSum(i), and then find the least index i for which this value is attained.


Что я уже пробовал:

<pre>import java.util.*;
import java.lang.*;
import java.io.*;
 
/* Name of the class has to be "Main" only if the class is public. */
class Codechef
{
	public static void main (String[] args) throws java.lang.Exception
	{
	int t;
	Scanner sc=new Scanner(System.in);
	t=sc.nextInt();
	for(int i=0;i<t;i++)
	{
	    int n=sc.nextInt();
	    int sum=0,count=0,min=Integer.MAX_VALUE;
	    int[] arr=new int[n+1];
	    int[] prefix=new int[n+1];
	    int[] suffix=new int[n+1];
	    int[] array=new int[n];
        int[] array1=new int[n];
	    for(int j=0;j<n;j++)
	    {
	    arr[j]=sc.nextInt();
	    sum+=arr[j];
	    }
	    suffix[0]=sum;
	   for(int j=1;j<n;j++)
	   {
	       sum-=(arr[j-1]);
	       suffix[j]=sum;
	   }
	     prefix[0] = arr[0];
	     for (int j = 1; j < n; j++)
	     {
	         prefix[j] = prefix[j-1] + arr[j];
	        
	     }
	     int max=Integer.MAX_VALUE;
	     for(int j=0;j<n;j++)
	     {
	         array[j]=suffix[j]+prefix[j];
             if(min>=array[j])
                 min=array[j];
           //  array1[j]=array[j];
	        //System.out.print(array[j] +" ");
	    // min=Math.min(min,array[j]);
	     }
      
	   
//	     max=array[0];
	   for(int j=0;j<array.length;j++)
	   {
	       if(array[j]==min)
           {
               if(max>=j)
                   max=j;
           }
	     //  System.out.println(j);
	    // System.out.print(array[j]+" ");
	      
	   }
       System.out.println(max+1);
        
	}
	}
}

Mehdi Gholam

Похоже на домашнюю работу.

ZurdoDev

Ну и что? Если они могут задать прямой вопрос, нет ничего плохого в том, чтобы помочь кому-то с домашним заданием.

OriginalGriff

И что же? Что он делает такого, чего вы не ожидали, или не делает того, что вы сделали?
Что вы пытались выяснить, в чем проблема?
Какая помощь вам нужна?

ZurdoDev

И в чем же заключается Ваш вопрос?

Member 12156949

какие изменения должны быть внесены в мой код?

1 Ответов

Рейтинг:
1

Patrice T

Цитата:
Шеф-повар и сумма с префиксом и суффиксом(получение некоторого тестового случая не удалось)

Показ уменьшенного примера неудачи (не более 10 значений) помог бы понять вашу проблему.

Вы знаете, что должен делать ваш код, используйте отладчик, чтобы найти, где ваш код ведет себя не так, как ожидалось.
Обратите особое внимание на то, как вы устанавливаете prefix, как я понимаю, проблема в том, что prefix первый элемент должен быть равен 0.

Существует инструмент, который позволяет вам видеть, что делает ваш код, его имя отладчик Это также отличный инструмент обучения, потому что он показывает вам реальность, и вы можете увидеть, какие ожидания соответствуют реальности.
Когда вы не понимаете, что делает ваш код или почему он делает то, что делает, ответ таков: отладчик.
Используйте отладчик, чтобы увидеть, что делает ваш код. Просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.

Отладчик-Википедия, свободная энциклопедия[^]
http://docs.oracle.com/javase/7/docs/technotes/tools/windows/jdb.html[^]
https://www.jetbrains.com/idea/help/debugging-your-first-java-application.html[^]
Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.