算法(三)、[海量] 数据处理

算法(三)、[海量] 数据处理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、海量数据处理

一、

相关文章
相关标签/搜索