java算法题
1.
*已知一个数组int[98],该数组里面存储了0~99共100个数字中的98个,数字不重复,
* 请用算法算出0~99中缺少的2个数字是哪两个?* 要求:数组自己用程序生成,数值介于0~99,相互之间不重复。
package myTest; import java.util.Arrays; import java.util.Random; /** * 已知一个数组int[98],该数组里面存储了0~99共100个数字中的98个,数字不重复, * 请用算法算出0~99中缺少的2个数字是哪两个? * 要求:数组自己用程序生成,数值介于0~99,相互之间不重复。 * 上传代码的时候将运算结果截图一起提交。 * @author Administrator * */ public class FindLost { public static void main(String[] args) { int[] ary = new int[98]; //数组默认每个值为0,现在改为-1 Arrays.fill(ary, -1); for(int i=0;i<98;){ int temp = new Random().nextInt(100); if(compare(temp,ary)) continue; ary[i++] = temp; } System.out.println("装载:"+ Arrays.toString(ary)); System.out.println("缺少:"+ Arrays.toString(find(ary))); } //比较有没有相同数据 public static boolean compare(int random,int [] ary){ for(int j=0;j<ary.length;j++){ if(random ==ary[j]){ return true; } } return false; } //查找缺少的2个数字 public static int[] find(int[]ary){ int[] lost = new int[2]; Arrays.sort(ary);//系统提供的排序 System.out.println("排序:"+ Arrays.toString(ary)); //查找方法 boolean same = false; int temp = 0;//仅为了自增用 for(int i=0;i<100;i++){ for(int j=0;j<ary.length;j++){ if(i==ary[j]){ same =true; break; } } if(!same){ lost[temp++] = i; }else{ same = false; } } return lost; } }
2.随机生成双色球号码
package myTest; import java.util.Random; import java.util.Arrays; public class DoubleBall { /**实现随机生成双色球号码: [ 02 22 13 16 18 12 12 ] 红球 33 个球 (01~33) 取 六 蓝球 16 个球 (01~16) 取 一 */ public static void main(String[] args) { int[] ary = new int[]{ }; Random r = new Random(); boolean same = false; while(ary.length<6){ int num = r.nextInt(34); for(int j=0;j<ary.length;j++ ){ if(ary[j] ==num){ same = true; break; } } if(same){ continue; } ary = Arrays.copyOf(ary, ary.length+1); ary[ary.length-1] = num; } //最后一位 ary = Arrays.copyOf(ary, ary.length+1); ary[ary.length-1] = r.nextInt(17); printView(ary); } /** * 按照格式打印显示 */ public static void printView(int[] ary){ System.out.print("[ "); for(int i = 0;i<ary.length;i++){ if(ary[i]<10){ System.out.print("0"+ary[i]+" "); }else{ System.out.print(ary[i]+ " "); } } System.out.println("] "); } }
3.三种排序算法
package myTest; import java.util.Arrays; public class Sort { public static void main(String[] args) { int[] ary = { 8, 5, 2, 1, 6, 4 }; //bubbleSort(ary); //selectionSort(ary); insertSort(ary); System.out.println(Arrays.toString(ary)); } /** 冒泡排序 大数向后 */ public static void bubbleSort(int[] ary) { for (int i = 0; i < ary.length - 1; i++) {// length-1次,最后一个不用冒了. for (int j = 0; j < ary.length - 1 - i; j++) { if (ary[j] > ary[j + 1]) { int t = ary[j]; ary[j] = ary[j + 1];ary[j + 1] = t; } } } } /**选择排序 每次选出最小的数放前面 */ public static void selectionSort(int[] ary) { for(int i=0;i<ary.length-1;i++){ for(int j=i+1;j<ary.length;j++){ if(ary[i]>ary[j]){ int t = ary[i]; ary[i] = ary[j];ary[j] = t; } } } } /**插入排序 */ public static void insertSort(int[] ary){ int t,i,j; for(i=1;i<ary.length;i++){ System.out.println(Arrays.toString(ary)); t = ary[i]; for(j=i-1;j>=0&&ary[j]>t;j--){ ary[j+1] = ary[j]; } ary[j+1] = t; } } }
4.打印菱形图案
package algorithm50; import java.util.Scanner; /**打印图形*/ public class Test19 { /** * *** ***** ******* ***** *** * */ public static void main(String[] args) { int n; Scanner scan = new Scanner(System.in); System.out.println("input:"); n = scan.nextInt(); for(int i= -(n-1);Math.abs(i)<n;i++ ){ for(int j=0;j<Math.abs(i);j++){ System.out.print(" "); } for(int k=0;k<2*(n-Math.abs(i))-1;k++){ System.out.print("*"); } System.out.println(); } } }
5.打印乘法口诀
package algorithm50; public class Test16 { //输出9*9 口诀。 public static void main(String[] args) { for(int i=1;i<10;i++){ for(int j=1;j<=i;j++){ System.out.print(j+" * "+i+" = "+i*j+" "); } System.out.println(); } } }