Pessoal, boa noite!
Estou com a penúltima actividade da faculdade para entregar, mas estou empancada a meio da sua resolução.
A questão é a seguinte:
Faça um programa que comece por pedir um valor N ao utilizador. De seguida, crie uma matriz de N x N e
preenche-a com valores inteiros aleatórios, entre 0 e 100.
Depois de apresentar a matriz inicial ao utilizador, deve percorrê-la, linha a linha, e substituir cada elemento pela média (inteira) de todos os elementos seguintes da matriz. O último elemento, M{N,N}, ficará com o valor ZERO.
Acho que o segredo é você calcular a soma total da matriz e ir subtraindo cada elemento! Ex:
N = 3
Matriz inicial:
2 19 45
16 33 21
76 55 3
Soma Total = 270;
Número (k) de elementos = 3 × 3 = 9;
Matriz Final:
M{1,1} = (Total - 2)/(k - 1) = 268/8 = 33
Total = 268
K = 8
M{1,2} = (Total - 19)/(k - 1) = 249/7= 35
Total = 249
K = 7
M{1,3} = (Total - 45)/(k - 1) = 204/6 = 34
Total = 204;
K = 6
[•••]
E quando k = 0 a média tem que ser 0!
33 35 34
37 38 44
29 3 0
import java.util.Random;
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("Insira um número:");
int n = scan.nextInt();
int[][] matriz = new int[n][n];
int total = 0;
Random rd = new Random();
for(int i = 0; i<n; i++){
for(int j = 0; j<n; j++){
int valor = (rd.nextInt(100) + 1);
matriz[i][j] = valor;
total += valor;
}
}
System.out.println("\nMatriz inicial:");
mostrarMatriz(matriz);
System.out.println();
/* Substituir cada elemento pela média (inteira)
* de todos os elementos seguintes da matriz.
*/
int k = n * n;
for(int i = 0; i<n; i++){
for(int j = 0; j<n; j++){
//A soma total de todos os elementos seguintes da matriz.
total -= matriz[i][j];
k -= 1;
int media = (k > 0)? (total/k) : 0;
matriz[i][j] = media;
}
}
System.out.println("Matriz final:");
mostrarMatriz(matriz);
}
private static void mostrarMatriz(int[][] matriz){
for(int i = 0; i<matriz.length; i++){
for(int j = 0; j<matriz[0].length; j++){
System.out.printf("%4d",matriz[i][j]);
}
System.out.println();
}
}
}
@Sonia_Santos sou calouro em Java, mas achei interessante o seu exercício e resolvi pegar pra resolver, o meu funcionou, talvez o código não fique claro pra você, mas espero que ajude!
Pra saber se ia dar certo, testei com os valores da sua matriz incial, e saiu os mesmo resultados!
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
final int minimo = 1;
final int maximo = 1000;
final int intervalo = maximo - minimo;
System.out.print("Insira um número: ");
int numero = scan.nextInt();
int[][] matrizInicial = new int[numero][numero];
int x = 0;
int y = numero*numero;
for(int i = 0; i < matrizInicial.length; i++) {
for (int j = 0; j < matrizInicial[i].length; j++) {
matrizInicial[i][j] = (int)(Math.random() * intervalo + minimo);
x += matrizInicial[i][j];
}
}
for(int i = 0; i < matrizInicial.length; i++) {
for(int j = 0; j < matrizInicial[i].length; j++) {
y -= 1;
if(y == 0) {
y = 1;
}
x -= matrizInicial[i][j];
matrizInicial[i][j] = x / y;
System.out.println(matrizInicial[i][j]);
}
}
Só para esclarecer qualquer dúvida que tenha ficado!
“Não entendo a razão mas quando ponho o codigo a correr não aparece igual. quando ponho 3 não fica igual ao exemplo nem com 5 fica igual à sua resolução.”
A matriz é preenchida de forma aleatória, entre 1 e 100:
int valor = (rd.nextInt(100) + 1);
matriz[i][j] = valor;
E o segredo para mostrar a matriz alinhada está nessa linha:
System.out.printf("%4d",matriz[i][j]);
São 4 espaços em branco que serão preenchido ou não pelo valor da matriz! Exemplo:
Oi @Sonia_Santos, ,
Eu testei e está funcionando normalmente, não está gerando os mesmos valores do seu exemplo, pois eu o havia modificado para gerar valores aleatórios como foi solicitado no exercício!
Veja com os números que estão no seu exercício se os resultados não são mesmos agora :