LoginSignup
0
0

More than 3 years have passed since last update.

【Java】多次元配列・内積計算(AOJ⑦内積)

Last updated at Posted at 2020-11-15

多次元配列

// 3*4*5の三次元配列
init [][][] list = new int [3][4][5]; 
// 2次元配列を初期化して宣言
int [][] list = [
  { 1, 2, 3 },
  { 4, 5, 6 },
  { 7, 8, 9 },
};
//var で初期化して宣言
var list = new int[][] [
  { 1, 2, 3 },
  { 4, 5, 6 },
  { 7, 8, 9 },
};
// 0行1列目にアクセス
System.out.println(list[0][1]); //2

ジャグ配列

  • 長さが異なる多次元配列
  • 最初の宣言では外側のサイズのみ指定
  • 1次元目は確保しないといけないが2次元目は確保不要
  • 2次元以降はダイナミックに変更できる!
    • ユースケース
    • 全人口の給料の配列を作るときに都道府県ごとに作成
    • int [][] = salary = new int[47][];
var list = new int [3][];
list[0] = new int[2]; //0番目の配列の要素は2個
list[1] = new int[3]; //0番目の配列の要素は3個
list[2] = new int[4]; //0番目の配列の要素は4個
var list = new int [][] {
  { 1, 2 },
  { 3, 4, 5 },
  { 6, 7, 8, 9 },
};
System.out.println(list[1][2]); //5 ※サイズは3

公舎の入居者数

A大学は1フロア10部屋、3階建ての公舎4棟を管理しています。公舎の入居・退去の情報を読み込み、各部屋の入居者数を出力するプログラムを作成して下さい。
n件の情報が与えられます。各情報では、4つの整数b, f, r, vが与えられます。これは、b棟f階のr番目の部屋にv人が追加で入居したことを示します。vが負の値の場合、-v人退去したことを示します。
最初、全ての部屋には誰も入居していないものとします。
Input
最初の行に情報の数 n が与えられます。
続いて n 件の情報が与えられます。各情報には4つの整数 b, f, r, v が空白区切りで1行に与えられます。
Output
4棟について入居者数を出力して下さい。各棟について、1階、2階、3階の順に入居者数を出力します。各階については、1番目、2番目、・・・、10番目の部屋の入居者数を順番に出力します。入居者数の前には1つの空白を出力して下さい。また、各棟の間には####################(20個の#)で区切って下さい。
Constraints
* 間違った棟番号・階・部屋番号は与えられない。
* 管理の過程で1部屋の入居者数が0より少なくなることはない。
* 管理の過程で1部屋の入居者数が9より多くなることはない。

import java.util.Scanner;
public class Main {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        //10部屋、3階建ての公舎4棟
        int[][][] list = new int[4][3][10];

        for(int i = 0; i < n; i++) {
            //b棟f階のr番目の部屋にv人が追加
            int b = sc.nextInt();
            int f = sc.nextInt();
            int r = sc.nextInt();
            int v = sc.nextInt();

            list[b-1][f-1][r-1] += v;
        }

        for(int i = 0 ; i< 4; i++) {
            for(int j = 0; j < 3; j++) {
                for (int k = 0; k < 10; k++) {
                    System.out.print(" " + list[i][j][k]);
                }
                System.out.println();
            }
            if (i != 3)
                System.out.println("####################");
        }
        }
}

ベクトルと行列の積

Input
1行目に n と mが空白区切りで与えられます。続く 
n 行に行列 A の要素aij が空白区切りで与えられます。続く m 行にベクトルbの要素 bi がそれぞれ1行に与えられます。
Output
出力は n行からなります。ベクトル cの要素 ci をそれぞれ1行に出力してください

//内積計算
import java.util.Scanner;

public class Main {
    public static void main(String[] args){
        Scanner scan=new Scanner(System.in);
        int n=scan.nextInt();
        int m=scan.nextInt();
        int a[][]=new int[n][m];
        //行列A
        for(int i=0;i<n;i++)for(int j=0;j<m;j++){
            a[i][j]=scan.nextInt();
        }
        //ベクトルb
        int b[]=new int[m];
        for(int i=0;i<m;i++)b[i]=scan.nextInt();
        //ベクトルc
        int c[]=new int[n];
        //c=A*b 内積計算
        for(int i=0;i<n;i++){
            for(int j=0;j<m;j++){
                c[i]+=a[i][j]*b[j];
            }
        }
        for(int i=0;i<n;i++)System.out.println(c[i]);
        scan.close();
    }
}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0