Здравейте,
Моля за съдействие с тази задача. Опитвам някакви решения, но не стигам до никъде. Ето го условието.
Above the Main Diagonal
Description
You are given a number N . Using it, create a square matrix of numbers, formed by powers of 2 and find the sum of the numbers above the main diagonal, excluding the diagonal itself.
Input
Read from the standard input.
On the first line, read the number N - the number of rows and columns.
Output
Print to the standard output.
On a single line print the sum of the numbers above the main diagonal excluding the diagonal.
Constraints
N can get as big as 30 .
Input
4
Output
70
Explanation
With N equal to 4, we will have a matrix that looks like this:
Аз я реших с вложен цикъл като симулирам реда от матрицата но не го запаметявам,ами с всеки оборот на цикъла реда се сменя до n ред и стария се изтрива.
На всяка врътка сумирам реда,като намалявам елементите с -1 за всеки цикъл на цикъла.
Предпоследния ред просто изваждам от масива последния елемент и го добавям към общата сума.
За съжаление решението ми е на Python не на Java.
n = int(input())
l =[1]*n
s = 0
custom_index = 0
for i in range(1,n):
number = l[0]
if i == 1:
custom_index = 1
else:
custom_index = 0
for j in range(custom_index,n):
l[j] = number * 2
number *= 2
if i == n - 1:
s += l[-1]
else:
s += sum(l[i:])
print(s)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class AboveTheMainDiagonal {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.valueOf(reader.readLine());
long value=0;
for (int i = 1; i < n; i++)
for (int j = i; j < n; j++)
value+= (long)Math.pow(2,i+j-1);
System.out.println(+value);
reader.close();
}
}
Ето едно чуждо решение на Джава,което можеш да си разгледаш с дебъгера.
Това което виждам аз е подобно на моето решение,реално матрицата никога не се създава,както е на примерната задача ами ред по ред се симулира и сумира с n - 1 елемента.
Помисли над тази логика и ако не можеш да решиш една задача,просто я остави за другия ден.
Разгледах я и я съкратих малко. Търсех някакво по-сложно решение явно, но сега като го дебъгнах го разбрах. Ето и моят вариант:
import java.util.Scanner;
public class AbovetheMainDiagonal {
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
int n = Integer.parseInt(scanner.nextLine());
long value=0;
for (int i = 1; i < n; i++)
for (int j = i; j < n; j++)
value+= (long)Math.pow(2,i+j-1);
System.out.println(value);
}
}