Member 13316008 Ответов: 2

Как мы можем решить эту головоломку с помощью java ?


Sachin likes sweets a lot. So, he goes to a market of sweets. There is a row of sweet stalls. Every sweet stall has different sweets. To save some time, he decided to buy sweets from contiguous stalls. So, he can buy from as many stalls as he wants, but all of those stalls need to be contiguous. He also decided to buy only 1 kg of sweets from each of those stalls. Cost of 1 kg of sweets for each stall is given. There is a strange rule of billing in that market. And that rule is as follows- Total cost of all sweets bought is sum of the cost of all sweets multiplied by the cost of sweet he bought at the end. e.g. if he buys sweets having cost 2, 3, 4 in the same order than total cost of sweets will be 2*4+3*4+4*4=36.

Теперь он задается вопросом, какова будет общая стоимость всех возможных способов покупки сладостей. Вы можете ему помочь? Поскольку это число может быть большим, вы должны взять по модулю конечного результата 10^9+7.

Входная спецификация ваша функция содержит единственный аргумент - одномерный целочисленный массив размера N, в котором I-й элемент обозначает стоимость 1 кг конфет из I-го ларька. Первая строка входных данных содержит целое число N, обозначающее размер массива. (1<=N<=10^5) следующие N строк ввода, каждая из которых содержит одно целое число от 1 до 9.

Выходная спецификация вы должны вернуть целое число - сумму стоимости всех возможных способов покупки сладостей по модулю 10^9+7.

Примеры примерный тестовый случай 1 - вход 3 1 2 3

Результат 53

Объяснение возможные способы покупки сладостей таковы-

а) 1

Б) 1 2

в) 2

г) 1 2 3

д) 2 3

f) 3

стоимость каждого из них следующая-

а) 1*1= 1

Б) 1*2+2*2= 6

в) 2*2= 4

d) 1*3+2*3+3*3= 18

е) 2*3+3*3= 15

Е) 3*3= 9

Следовательно общая стоимость будет 1+6+4+18+15+9=53

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

class A {

    static void printSubsets(int set[]) {
        int n = set.length;
        for (int i = 0; i < (1 << n); i++) {
            for (int j = 0; j < n; j++) {
                if ((i & (1 << j)) > 0) {
                    System.out.print(set[j] + " ");
                }
            }
            System.out.println();
        }
    }

    public static void main(String[] args) {
        int set[] = { 1, 2, 3 };
        printSubsets(set);
    }
}

Какой дополнительный код следует добавить, чтобы получить вышеприведенный результат?

ZurdoDev

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

Member 13316008

Я не могу найти стоимостную часть программы .Может ли кто-нибудь дать мне представление об этом?

Richard MacCutchan

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

2 Ответов

Рейтинг:
2

Patrice T

Цитата:
Как мы можем решить эту головоломку с помощью java ?

Не "мы", а просто "вы", Эта головоломка-своего рода соревнование/вызов. Цель такова ты найдите умный способ решить головоломку как можно быстрее.
Что я могу сказать, так это то, что грубая сила никогда не является желаемым решением.
мой Совет:
1) Создайте программу грубой силы. Как только он заработает, добавьте код для подсчета количества операций, которые ему нужно добавить, умножить, чтобы получить результат.
2) Выполняйте прогоны с набором данных 1, затем 2 и так далее. Обратите внимание, как развивается счет.
3) Подумайте о том, как уменьшить эти подсчеты с помощью более умного кода.
Иначе говоря, вы должны создать алгоритм или объединить известные из них.

Цитата:
Я не могу найти стоимостную часть программы .

у вас есть подробный пример, с помощью отладчика легко сравнить то, что делает ваш код, с тем, что он должен делать.

Существует инструмент, который позволяет вам видеть, что делает ваш код, его имя отладчик Это также отличный инструмент обучения, потому что он показывает вам реальность, и вы можете увидеть, какие ожидания соответствуют реальности.
Когда вы не понимаете, что делает ваш код или почему он делает то, что он делает, ответ таков: отладчик.
Используйте отладчик, чтобы увидеть, что делает ваш код. Просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 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[^]
Отладчик здесь, чтобы показать вам, что делает ваш код, и ваша задача-сравнить с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.


Рейтинг:
2

Member 14007908

**для Java:**

импорт java.util.Сканер;
открытый класс АБВ {
публичный статический пустота главный(строка[] аргументы)
{

Scanner scan = новый сканер(System.in);

int N,i,j,k,s=0,c;

Системы.из.код println("введите кол-во лотков(должны быть в диапазоне от 1 до 100000)\Н");

Н=сканировать.nextInt();

если(N>0& & amp;N<10000)

{

int a[]=новый int[N];

c=0;

для(i=0;i<N;i++)

{

Системы.из.напечатать("введите стоимость сладкий "+ (я+1) +" - й кабинки:\Н");

а[я]=сканировать.nextInt();

если(a[i]>9||a[i]<1)

с++;

}

если(c==0)

{

для(j=1;j<=N;j++)

{

для(k=j;k<=N;k++)


{

Для(я=Дж;я&Л;=К;Я++)

{

s=s+a[i-1]*a[k-1];


}


}

}

System.out.print(s%1000000007);

}

}

}

}



**ДЛЯ C**


#включить<stdio.h>
тап_п(){

int N,i,j,k,s=0;

puts("введите количество киосков(должно быть от 1 до 100000)\n");

scanf("%d",&N);

если(N>0& & amp;N<10000)

{

int a[N];


для(i=0;i<N;i++)
{
q:printf("введите стоимость сладкого в %d th stall:\n",i+1);

scanf("%d",&a[i]);

если(a[i]>9||a[i]<1)

{
puts("значение вне диапазона 0-9 ");

Гото вопрос;
}
}


для(j=1;j<=N;j++)

{

для(k=j;k<=N;k++)

{

Для(я=Дж;я&Л;=К;Я++)
{
s=s+a[i-1]*a[k-1];
}
}
}
printf("%d",s%1000000007);


}
}


Dave Kreskowiak

Выполнение работы других людей для них совсем не помогает.