算法部分代码

整数划分:

package com.etc.icss;

import java.util.HashMap;

import java.util.Map;

public class Test {

private static void getString(String t, int h, int o, Map<String, String> map) {

if (h > o) {

getString(t, o, o, map);

} else {

if (h < o) {

getString(h + "+" + t, h, o - h, map);

for (int i = h - 1; i >= 2; i--) {

getString(h + "+" + t, i, o - h, map);

}

} else {

String out = h + "+" + t;

out = out.substring(0, out.length() - 1);

map.put(out, out);

for (int i = h - 1; i >= 2; i--) {

getString(t, i, o, map);

}

}

String out = t + "";

for (int x = 0; x < o; x++)

out = 1 + "+" + out;

out = out.substring(0, out.length() - 1);

map.put(out, out);

}

}

public static void outAll(int n) {

Map<String, String> map = new HashMap<String, String>();

getString("", n, n, map);

for (String key : map.keySet()) {

System.out.println(key);

}

}

public static void main(String[] args) {

outAll(6);

}

}

棋盘问题:

package com.etc.icss;

import java.util.Scanner;  

public class QiPan {

private int counter = 0;

private boolean hasMap = false;

private int[][] map = null;

public void chessBoard(int northWestX, int northWestY, int targetX,int targetY, int size) {

if (!hasMap) {

buildMap(size);

hasMap = true;}

if (size == 1) {return;}

size /= 2;

int sign = ++counter;

if (targetX < northWestX + size && targetY < northWestY + size) {

chessBoard(northWestX, northWestY, targetX, targetY, size);

} else {

if (map[northWestY + size - 1][northWestX + size - 1] != 0) {

System.out.println("position (" + (northWestX + size - 1) + ", "+ (northWestY + size - 1)+ ") has been filled!");}

map[northWestY + size - 1][northWestX + size - 1] = sign;

chessBoard(northWestX, northWestY, northWestX + size - 1,

northWestY + size - 1, size);}

if (targetX >= northWestX + size && targetY < northWestY + size) {

chessBoard(northWestX + size, northWestY, targetX, targetY, size);

} else {

if (map[northWestY + size - 1][northWestX + size] != 0) {

System.out.println("position (" + (northWestX + size) + ", "+ (northWestY + size - 1) + ") has been filled!");}

map[northWestY + size - 1][northWestX + size] = sign;

chessBoard(northWestX + size, northWestY, northWestX + size,northWestY + size - 1, size);}

if (targetX >= northWestX + size && targetY >= northWestY + size) {

chessBoard(northWestX + size, northWestY + size, targetX, targetY,

size);

} else {

if (map[northWestY + size][northWestX + size] != 0) {

System.out.println("position (" + (northWestX + size - 1) + ", "+ (northWestY + size - 1)+ ") has been filled!");}

map[northWestY + size][northWestX + size] = sign;

chessBoard(northWestX + size, northWestY + size, northWestX + size,northWestY + size, size);}

if (targetX < northWestX + size && targetY >= northWestY + size) {

chessBoard(northWestX, northWestY + size, targetX, targetY, size);

} else {

if (map[northWestY + size][northWestX + size - 1] != 0) {

System.out.println("position (" + (northWestX + size - 1) + ", "+ (northWestY + size - 1)+ ") has been filled!");}

map[northWestY + size][northWestX + size - 1] = sign;

chessBoard(northWestX, northWestY + size, northWestX + size - 1,northWestY + size, size);}}

循环赛日程表问题:

private void buildMap(int size) {

map = new int[size][size];

for (int y = 0; y < size; ++y) {

for (int x = 0; x < size; ++x) {

map[y][x] = 0;}}}

public void printMap() {

for (int y = 0; y < map.length; ++y) {

for (int x = 0; x < map[0].length; ++x) {

System.out.print(map[y][x] + "\t");}

System.out.println();}}

public static void main(String[] args) {

System.out.println("请输入您想要的合法大小,例如:4");

Scanner sc = new Scanner(System.in);

int i = sc.nextInt();

System.out.println("你输入的是:" + i + " * " + i+ " 的矩阵 , 默认特殊位置为(1, 2),也可以对参数作出更改!");

double flag = Math.log(i) / Math.log(2);

if ((flag - (int) flag) != 0) {

System.out.println("参数不合法!");

} else {

QiPan arithmetic = new QiPan();

arithmetic.chessBoard(0, 0, 1, 2, i);

arithmetic.printMap();

}}}

package com.etc.icss;

import java.util.Scanner;

public class RoundRobinSchedule {

public static void main(String[] args) {

         Scanner scanner = new Scanner(System.in);

         System.out.println("请输入 k 的值(2^k个运动员)");

         int k = scanner.nextInt();

         scanner.close();

         // 求运动员人数

        int n = 1;

         for (int i = 1; i <= k; i++) {

             n = n * 2; }

         // 创建二维数组作为日程表

         int[][] array = new int[n + 1][n + 1];

         // 制作日程表

         table(k, array, n);

         // 输出日程表

         printTable(array, n);}

     private static void table(int k, int[][] a, int n) {

         // 设置日程表第一行

         for (int i = 1; i <= n; i++) {

             a[1][i] = i; }

         // 每次填充时,起始填充位置

         int m = 1;

         for (int s = 1; s <= k; s++) {

             n /= 2;

             for (int t = 1; t <= n; t++) {

                 // 控制行

                 for (int i = m + 1; i <= 2 * m; i++) {

                     // 控制列

                     for (int j = m + 1; j <= 2 * m; j++) {

                         // 右下角等于左上角的值

                         a[i][j + (t - 1) * m * 2] = a[i - m][j + (t - 1) * m * 2 - m];

                         // 左下角等于右上角的值

                         a[i][j + (t - 1) * m * 2 - m] = a[i - m][j + (t - 1) * m * 2];

                     } } }

             m *= 2;} }

     // 输出日程表

     private static void printTable(int[] array[], int n) {

         for (int i = 1; i <= n; i++) {

             for (int j = 1; j <= n; j++) {

                 System.out.print(array[i][j] + " ");}

             System.out.println();

         }}}

矩阵连乘问题

package com.etc.icss;

public class matrixChain {

//计算最优值

public void matrixChain(int[]p, int[][]m, int [][]s)

   {

      int n=p.length-1;

      for (int i=1;i<=n;i++) m[i][i] = 0;

      for (int r=2;r<=n;r++)

         for(int i=1;i<=n-r+1;i++){

            int j=i+r-1;

            m[i][j] = 999999999;

            s[i][j] = i;

            for (int k = i; k < j; k++) {

               int t = m[i][k] + m[k+1][j] + p[i-1]*p[k]*p[j];

               if (t < m[i][j]) {

                 m[i][j] = t;

                 s[i][j] = k;}

               }

            }

   }

//构造最优解

public  void TraceBack(int [][]s, int i, int j)

   {

     if(i!=j){

     TraceBack(s,i,s[i][j]);

     TraceBack(s,s[i][j]+1,j);

     System.out.println("Multiply  A["+i+":"+s[i][j]+"] and  A["+(s[i][j]+1)+":"+j+"]");

             }

   }

// 打印加括号的最优解方案

public void OptimalParens(int[][] s,int i,int j){

    if(i==j)System.out.print("(A"+i);

    else{

           OptimalParens(s,i,s[i][j]);

           OptimalParens(s,s[i][j]+1,j);

           System.out.print(")");

        }

    }

}

哈夫曼编码未编译实现

package com.etc.icss;

//矩阵阶乘的测试

public class MatrixText {

    public static void main(String agrs[])

    {  int[] p={30,35,15,5,10,80,25,65,40,20};

        int n=p.length;

        int [][]m=new int [n][n];

        int [][]s=new int [n][n];

        matrixChain m1=new matrixChain();

        m1.matrixChain(p, m, s);

        System.out.println("该矩阵阶乘子问题数乘的次数:");

        for(int i=1;i<m.length;i++){

            for(int j=1;j<m.length;j++){

                if(i>j)

                {System.out.print("----"+"\t"); }

                else 

                { System.out.print(m[i][j]+"\t");} }

            System.out.println(); }

        System.out.println();

        System.out.println("该矩阵阶乘子问题数乘的次数:");

        for(int i=1;i<s.length;i++){

            for(int j=1;j<s.length;j++){

                if(i>j)

                    { System.out.print("----"+"\t");}

                else{ System.out.print(s[i][j]+"\t"); }  }

            System.out.println(); }

        System.out.println();

        System.out.println("该矩阵阶乘的最优解:");

        m1.TraceBack(s,1,n-1);

        m1.OptimalParens(s,1,n-1);

    }

}

批处理作业调度

package com.etc.icss;

public class BestSchedule2 {

int n=3;//作业数??

int[][] mission={{2,1},{3,1},{2,3}};

int bestFinishtime = Integer.MAX_VALUE;//最短时间?

int []schedule = {0,1,2};//默认的策略顺序。??

int []bestSchedule = new int[n];//最佳顺序??

int []f2 = new int[n];//第二台机器的每个任务的结束时间

int f1,totaltime;//f1当前任务的结束时间,f2的总时间

public void swap(int[] str,int m,int n){

int temp = str[m];

str[m] = str[n];

str[n] = temp;}

public void BackTrack(int t){

//当搜索到叶子节点后,将这次遍历的策略赋值到最佳策略。?

if(t>n-1){

bestFinishtime = totaltime;

for(int i=0;i<n;i++){

bestSchedule[i] = schedule[i];

return;}}

for(int i=t;i<n;i++){

f1+=mission[schedule[i]][0];

if(t==0)

f2[t]=f1+mission[schedule[i]][1];

else

f2[t]=((f2[t-1]>f1)?f2[t-1]:f1)+mission[schedule[i]][1];

totaltime +=f2[t];

//如果该作业处理完之后,总时间已经超过最优时间,就直接回溯。

if(totaltime<bestFinishtime){

swap(schedule,t,i);

BackTrack(t+1);

swap(schedule,t,i);}

f1 -= mission[schedule[i]][0];

totaltime -= f2[t];}}

public static void main(String[] args){

BestSchedule2 bs = new BestSchedule2();

bs.BackTrack(0);

System.out.println("最佳调度方案为:");

for(int i=0;i<bs.n;i++){

System.out.print(bs.bestSchedule[i]+"??");

System.out.println();

System.out.println("其完成时间为"+bs.bestFinishtime); }}}

 π的计算

package com.etc.icss;

import java.util.Scanner;

public class Pai {

public static void main(String[] args){

Scanner input = new Scanner(System.in);

double sum=0;

int a;

for(int k=1;k<=50;k++){

a=k*10000;

for(int i=1;i<=a;i+=2){

sum+=4*(1.0/(2*i-1)-1.0/(2*i+1));

}

System.out.println("结果是"+sum);

sum=0;

}

}

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值