Member 12694317 Ответов: 2

Нужно решение C для приведенной ниже проблемы


Заявление

Кришна очень любит конфеты, поэтому всякий раз, когда он их получает, он хранит их так, чтобы он мог съесть их позже, когда захочет.

Недавно он получил N коробок конфет, каждая из которых содержит конфеты Ci, где Ci представляет собой общее количество конфет в I-й коробке. Кришна хочет хранить их в одной коробке. Единственное ограничение состоит в том, что он может выбрать любые две коробки и хранить их совместное содержимое только в пустой коробке. Предположим, что имеется бесконечное число пустых ящиков.

За один раз он может взять любые две коробки для передачи, и если обе коробки, скажем, содержат X и Y количество конфет соответственно, то это займет у него ровно X+Y секунд времени. Поскольку он очень хочет собрать их все, он подошел к вам, чтобы сказать ему минимальное время, за которое все конфеты могут быть собраны.

входной формат:

Первой строке входных данных находится количество теста Т
Каждый тестовый случай состоит из двух входных данных
Первый вход тестового случая-это количество ящиков N
Второй вход-это N целых чисел, разделенных пробелами, обозначающими количество конфет в каждой коробке


выходной формат:

Выведите минимальное требуемое время в секундах для каждого тестового случая. Распечатайте каждый вывод на новой строке.

Ограничения:

1 ≤T≤10
1 ≤N≤ 10000
1 ≤ [конфеты в каждой коробке] ≤ 100009


Вход и выход образца

СНО. Объяснение Ввода Вывода

1.

1
4
1 2 3 4

o/p:19

4 коробки, каждая из которых содержит 1, 2, 3 и 4 конфеты соответственно.
Добавление 1 + 2 в новую коробку занимает 3 секунды
Добавление 3 + 3 в новую коробку занимает 6 секунд
Добавление 4 + 6 в новую коробку занимает 10 секунд
Следовательно, общее затраченное время составляет 19 секунд. Могут быть и другие комбинации, но общее время не опускается ниже 19 секунд.

2.

1
5
1 2 3 4 5

o/p:33

5 коробок, каждая из которых содержит 1, 2, 3, 4 и 5 конфет соответственно.
Добавление 1 + 2 в новую коробку занимает 3 секунды
Добавление 3 + 3 в новую коробку занимает 6 секунд
Добавление 4 + 5 в новую коробку занимает 9 секунд
Добавление 6 + 9 в новую коробку занимает 15 секунд
Следовательно, общее затраченное время составляет 33 секунды. Могут быть и другие комбинации, но общее время не опускается ниже 33 секунд.

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

#include <stdio.h>
int main(){
	int i,t;
	scanf("%d",&t);
	for(i=0; i<t;i++)
		int n,j,time=0,a[10001],sum=0,add=0;
		scanf("%d",&n);

		
		for(j=0; j<n;j++)
		    scanf("%d",&a[j]);
		}
		for(j=0;j<n;j++){
		    time=a[j]+a[j+1];
		    sum=time+sum;
		    
		}
		printf("%d",sum);
	}
	return 0;
}

[no name]

Пустая трата времени на публикацию здесь. Это не кодовая служба.

Member 12694317

Это та проблема, которая была задана вчера на конкурсе, и я не мог этого сделать that...so просто хотел знать, как ее решить.

Richard MacCutchan

Это математическая задача, поэтому вам нужно сначала разобраться в этом. Как только вы это сделаете, то превратить его в код будет легко.

2 Ответов

Рейтинг:
0

OriginalGriff

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

Попробуйте сами, возможно, вы обнаружите, что это не так сложно, как вы думаете!

Если вы столкнетесь с конкретной проблемой, то, пожалуйста, спросите об этом, и мы сделаем все возможное, чтобы помочь. Но мы не собираемся делать все это для вас!
Поэтому, если этот код не делает того, что требуется, используйте отладчик, чтобы выяснить, почему. Тестирование и исправление вашего кода-это такая же часть разработки, как и его кодирование в первую очередь!


Member 12694317

У меня проблема с цикличностью. пожалуйста дайте любое предложение или любую ссылку для справки

OriginalGriff

Какая "проблема в циклировании"?
Помните, что мы не можем видеть ваш экран, получить доступ к вашему жесткому диску или прочитать ваши мысли.

Member 12694317

#включить <stdio.h>
тап_п(){
int i,t;
scanf("%d",&t);
для(i=0; i<t; i++){
="" интервал="" изм();
="" }
="" return="" 0;
}

int="" func(){
="" i,="" a[10001],n,sum="0,sum1=0,sum2=0," f="1,r," p;
="" scanf("%d",&n);
="" для(Я="0;" я&Л;П;="" функции scanf("%д",&амп;а[я]);
=""
="" &ампер;&ампер;="" Р="А[я]+а[я+1];
"p="a[i+2]+a[i+3];
"*="" if(a[i+1]="=NULL){
"}*="" if((r+a[i+2])="">p){
sum1=sum1+p;
}
еще{
сум2=сум2+r;
}
сумма=sum1+sum2;

}
printf("%d",sum);
возврат суммы;
}

Я пытаюсь сделать что-то вроде этого...но не получаю результата

OriginalGriff

Итак, вы посмотрели, какой результат вы получаете, и сравнили его с тем, что вам нужно? В чем же разница? Почему?

Member 12694317

это проблема, которая была задана вчера на конкурсе, и я не мог этого сделать that...so просто хотел знать, как ее решить.

Рейтинг:
0

Patrice T

Цитата:
У меня проблема с цикличностью. пожалуйста дайте любое предложение или любую ссылку для справки
Это хорошая идея, чтобы заявить, что это проблема, с которой вы сталкиваетесь.

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

у вас есть список коробок, известных по количеству конфет внутри. у вас есть 1 операция: выберите 2 коробки, объедините их и положите обратно полученную коробку.

Возьмите пример с 1 10 5 проверьте все возможности
1 10 5 => 11 5 => 16 стоимость= 11 + 16 = 27
1 10 5 => 1 15 => 16 стоимость= 15 + 16 = 31
1 10 5 => 6 10 => 16 стоимость= 6 + 16 = 22

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