算法(三)、[海量] 數據處理

算法(三)、[海量] 數據處理java

1、數據處理算法

矩陣加法、乘法、轉置、反序、對角線元素之和編程

查找矩陣、最小k個數、數組


2、海量數據處理ide


1、數據處理函數

一、矩陣加法測試


int[][] A = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
int[][] B = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
int[][] C = new int[3][3];
for (int i = 0; i < 3; i++) {
    for (int j = 0; j < 3; j++) {
        C[i][j] = A[i][j] + B[i][j];
    }
}
for (int i = 0; i < 3; i++) {
    for (int j = 0; j < 3; j++) {
        System.out.print(C[i][j] + "\t");
    }
    System.out.println();
}


二、矩陣轉置spa


int[][] A = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
int[][] D = new int[3][3];
for (int i = 0; i < 3; i++) {
    for (int j = 0; j < 3; j++)
        D[i][j] = A[j][i];
}
for (int i = 0; i < 3; i++) {
    for (int j = 0; j < 3; j++) {
        System.out.print(D[i][j] + "\t");
    }
    System.out.println();
}

三、矩陣相乘orm

public static int[][] matrix(int a[][], int b[][]) {
    // 當a的列數與矩陣b的行數不相等時,不能進行點乘,返回null
    if (a[0].length != b.length)
        return null;
    // c矩陣的行數y,與列數x
    int y = a.length;
    int x = b[0].length;
    int c[][] = new int[y][x];
    for (int i = 0; i < y; i++)
        for (int j = 0; j < x; j++)
            // c矩陣的第i行第j列所對應的數值,等於a矩陣的第i行分別乘以b矩陣的第j列之和
            for (int k = 0; k < b.length; k++)
                c[i][j] += a[i][k] * b[k][j];
    return c;
}


四、矩陣反序排序

輸入:

1 2 3
4 5 6
7 8 9

輸出:

9 8 7
6 5 4
3 2 1

至關於將a[2][2]和a[0][0]位置交換,a[2][1]和a[0][1]位置交換。能夠發現對於前者2+0=2,2+0=2;對於後者2+0=2,1+1=2。

public static int[][] result(){
    int[][] a={{1,2,3},{4,5,6},{7,8,9}};
    int[][] b=new int[3][3];
    for(int i=0;i<3;i++){
        for(int j=0;j<3;j++){
            b[2-i][2-j]=a[i][j];
        }
    }
    return b;
}


五、求n*n矩陣對角線元素之和。

int[][] t = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
int a = 0;
for (int i = 0; i < t[1].length; i++) {
    a += t[i][i];
}
System.out.println(a);


六、在一個二維數組中(每一個一維數組的長度相同),每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函數,輸入這樣的一個二維數組和一個整數,判斷數組中是否含有該整數。


public static boolean YoungMatrix(int arr[][], int searchKey){
    int COL=arr.length;
    int ROW=arr.length;
    int i = 0, j = COL - 1;
    int var = arr[i][j];
    while (true){
        if (var == searchKey)
            return true;
        else if (var < searchKey && i < ROW - 1)
            var = arr[++i][j];
        else if (var > searchKey && j > 0)
            var = arr[i][--j];
        else
            return false;
    }
}

七、找出n個數裏最小的k個

輸入描述:

    每一個測試輸入包含空格分割的n+1個整數,最後一個整數爲k值,n不超過100。

輸出描述:

    輸出n個整數裏最小的k個數。升序輸出

示例1

    輸入

    3 9 6 8 -10 7 -11 19 30 12 23 5

    輸出

    -11 -10 3 6 7


import java.util.Arrays;
import java.util.Scanner;
  
public class Main {
    public static void main(String[] args) {
        Scanner in=new Scanner(System.in);
        String[] string=in.nextLine().split(" ");
        int[] array=new int[string.length-1];
        for(int i=0;i<string.length-1;i++){
            array[i]=Integer.parseInt(string[i]);
        }
        Arrays.sort(array);
        for(int i=0;i<Integer.parseInt(string[string.length-1]);i++){
            System.out.print(array[i]);
            if(i!=Integer.parseInt(string[string.length-1])-1){
                System.out.print(" ");
            }
        }
    }
}


八、將一個十進制數轉化成二進制數

十進制轉二進制.png


String temp = "";
int num = 198890;
while (num != 0) {
    temp = num % 2 + temp;
    num = num / 2;
}
System.out.println(temp);


九、輸入三個數字,若三個數字都相等則打印yes


public static void t(int a, int b, int c) {
    if (a == b && a == c) {
        System.out.println("yes");
    }
}


十、求N的階乘N!  

法一(非遞歸):  

public static int b(int n){
    int s=1;
    while(n>0){
        s=s*n;
        n=n-1;
    }
    return s;
}
法二(遞歸):
public static int a(int n){
    if(n==0||n==1){
        return 1;
    }
    return n*a(n-1);
}


十一、判斷兩個字符串是否爲迴環變位

public static void h(String a, String b) {
    if (a.length() == b.length()) {
        if (a.concat(b).indexOf(b) > 0 && b.concat(a).indexOf(a) > 0) {
            System.out.println("yes");
        } else {
            System.out.println("no");
        }
    } else {
        System.out.println("no");
    }
}


十二、求最大公約數


public static int getGCD(int a, int b) {
    int mod = a % b;
    while (mod != 0) {
        a = b;
        b = mod;
        mod = a % b;
    }
    return b;
}


1三、最小公倍數

    須要先求出最大公約數

public static int min(int m, int n) {
    return m * n / getGCD(m, n);
}


1四、求兩個正整數a和b的全部不大於n的公倍數

提示:求出最大公約數,而後利用(a*b)/最大公約數=最小公倍數,最後將最小公倍數依次增大一倍後與n比較大小,若是不大於n,則cunt進行+1操做。


1五、找到能除盡1至n的的每一個數字的最小整數m。如輸入2 3 4 ,輸出2 6 12


Scanner cin = new Scanner(System.in);
BigInteger[] a = new BigInteger[105];
a[1] = BigInteger.ONE;
for (int i = 2; i <= 100; i++)// 預處理
{
    a[i] = a[i - 1].multiply(BigInteger.valueOf(i)).divide(a[i - 1].gcd(BigInteger.valueOf(i)));
}
while (cin.hasNext()) {
    int n = cin.nextInt();
    System.out.println(a[n].toString());
}


1六、斐波拉契數列


public static long fibonacci(long num) {
    if (num == 0 || num == 1) {
        return num;
    } else {
        return fibonacci(num - 1) + fibonacci(num - 2);
    }
}
public static void main(String[] args) {
    for (int counter = 0; counter <= 10; counter++) {
        System.out.printf("斐波那契數列 of %d is: %d\n", counter, fibonacci(counter));
    }
}


1七、輸入三個數,按照從大到小輸出

法一:

Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
int b = sc.nextInt();
int c = sc.nextInt();
int t;
if (a < b) {
    t = a;a = b;b = t;
}
if (a < c) {
    t = a;a = c;c = t;
}
if (b < c) {
    t = b;b = c;c = t;
}
System.out.println(a + " " + b + " " + c);


法二:


int d = sc.nextInt();
int e = sc.nextInt();
int f = sc.nextInt();
int[] gg = new int[3];
gg[0] = d;
gg[1] = e;
gg[2] = f;
Arrays.sort(gg);
for (int i = gg.length - 1; i >= 0; i--) {
    System.out.println(gg[i]);
}


1八、打印楊輝三角

    打印出楊輝三角形(要求打印出10行以下圖)      
            1   
          1    1   
        1    2    1   
      1    3    3    1   
    1    4    6    4    1   
1    5    10    10    5    1   
…………




1九、求1+2!+3!+...+20!的和  

long sum = 0;
long fac = 1;
for (int i = 1; i <= 20; i++) {
    fac = fac * i;
    sum += fac;
}
System.out.println(sum);


20、有一分數序列:2/1,3/2,5/3,8/5,13/8,21/13...求出這個數列的前20項之和。

int x = 2, y = 1, t;
double sum = 0;
for (int i = 1; i <= 20; i++) {
    sum = sum + (double) x / y;
    t = y;
    y = x;
    x = y + t;
}
System.out.println("前20項相加之和是: " + sum);




2一、有一、二、三、4四個數字,能組成多少個互不相同且無重複數字的三位數?都是多少?   

int count = 0;
for (int i = 1; i < 5; i++) {
    for (int j = 1; j < 5; j++) {
        for (int k = 1; k < 5; k++) {
            if (i != j && i != k && j != k) {
                count++;
                System.out.println(i * 100 + j * 10 + k);
            }
        }
    }
}
System.out.println(count + "個三位數");


2二、打印a * 1 + b * 2 + c * 3 =num的全部組合


public static void printNum(int sum){
   for(int i=0;i<sum;i++){
        for(int j=0;j<sum;j++){
            for(int k=0;k<sum;k++){
                if(i*1+j*2+k*3==sum){
                    System.out.println("i:"+i+" j:"+j+" k:"+j);
                }
            }
        }
    }
}

2三、36塊磚,36人搬,男搬4,女搬3,兩個小兒擡一磚,要求一次性搬完,須要男、女、小兒各多少人?


for (int i = 0; i < 36; i++) {
    for (int j = 0; j < 36; j++) {
        for (int k = 0; k < 36; k++) {
            if (4 * i + 3 * j + k / 2 == 36 && i + j + k == 36 && k % 2 == 0) {
                System.out.println("man=" + i + ";women=" + j + ";child=" + k);
            }
        }
    }
}


2四、打印九九乘法表


for (int i = 1; i <= 9; i++) {
    for (int j = 1; j <= i; j++) {
        System.out.print(i + "*" + j + "=" + i * j + "  ");
    }
    System.out.println();
}



2五、一個數若是剛好等於它的因子之和,這個數就稱爲 "完數 "。例如6=1+2+3.編程找出1000之內的全部完數。

int N=100, m, s;
System.out.println("小於" + N + "的完數有");
for (int i = 1; i <= N; i++) {
    s = 0;
    for (m = 1; m < i; m++) {
        if (i % m == 0)
            s += m;
    }
    if (s == i) {
        System.out.println(i);
    }
}



2、海量數據處理

一、

相關文章
相關標籤/搜索