简单算法总结
冒泡排序法
int[] arr = new int[10]; int max = arr[0]; for(int i=0;i<arr.length;i++){ arr[i] = (int) (Math.random()*100+1); System.out.print(arr[i]+" "); } for(int i=0;i<arr.length-1;i++){ for(int k=0;k<arr.length-1-i;k++){ if(arr[k]>arr[k+1]){ int t = arr[k]; arr[k] = arr[k+1]; arr[k+1] = t; } } } System.out.println(); System.out.println(Arrays.toString(arr));
数组元素中的最大值放在数组最后一位的后面
int[] arr = new int[10]; int max = arr[0]; for(int i=0;i<arr.length;i++){ arr[i] = (int) (Math.random()*100+1); System.out.print(arr[i]+" "); } for(int i=1;i<arr.length;i++){ if(arr[i] > max){ max = arr[i]; } } System.out.println("\n"+max+"\n"+"-------------------"); arr = Arrays.copyOf(arr, arr.length+1); arr[arr.length-1] = max; for(int i=0;i<arr.length;i++){ System.out.print(arr[i]+" ");
9*9乘法表
for(int i=1;i<=9;i++){ for(int k=1;k<=i;k++){ System.out.print(k+"*"+i+"="+k*i+"\t"); } System.out.println(); }
随机生成10个数字,判断里面最大的数
int[] a = new int[10]; int max = a[0];//用于存储最大值 for(int i=0;i<a.length;i++){ a[i] = (int) (Math.random()*100+1); System.out.print(a[i]+" "); } for(int i=1;i<a.length;i++){ if(a[i]>max){ max=a[i]; } } System.out.println("\n"+max);
闰年判断
//能被4整除不能被100整除,或者能被400整除的就是闰年 Scanner scan = new Scanner(System.in); System.out.println("请输入年份:"); System.out.println("输入-1可退出!"); int year = scan.nextInt(); while(true){ if(year <-1){ System.out.println("输入错误!"); }else if(year%4==0 && year%100!=0 || year%400==0){ System.out.println(year+"是闰年"); }else if(year == -1){ break; }else{ System.out.println(year+"是平年!"); } year = scan.nextInt(); }
斐波那契数列,求第n为上的数
public static void main(String[] args) { /** * 1. 斐波那契数列指的是这样一个数列 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ... * 数列第一项和第二项是1, 从第三项开始,每一项都等于前两项之和。 */ int num = f(7); System.out.println(num); } public static int f(int n){ if(n<=1) return 1; return f(n-1)+f(n-2); }
1+2+3+4+....n的和
1*2*3*4*5*.....*n的积,把sum+=i换成*=就可以了,不过要考虑溢出的问题,累减,累除一样
int sum=0; for(int i=1;i<=n;i++){ sum+=i; } System.out.println(sum);
质数:一个大于1的自然数,除了1和它本身之外,不能被其它自然数整除的数
求2~n之间的质数
Scanner scanner = new Scanner(System.in); System.out.println("请输入范围2~"); int n = scanner.nextInt(); //除了1和它本身之外,能被其它自然数整除的数,就是质数 //声明个boolean型变量,判断是不是质数 boolean isPrime; //声明int变量,记录质数的个数 int num = 0; for(int i=2;i<=n;i++){ isPrime = true; for(int k=2;k<i;k++){//如果循环成功结束,说明i都不能被它小于的数整除,就是质数 //上面已经写明k<i,说明被除数肯定小于除数,不存在取余一直为0的情况 if(i%k==0){//取余==0说明能被整除,所以不是质数,isPrime设置为false isPrime = false; break;//不是质数,跳出,进行下个数的运算 } } if(isPrime){//到这里,说明这个数不能被小于它的数整除,就是质数 System.out.println(i); num++;//到这里,就是质数,记录个数 } } System.out.println(num);
求 1+1/2+1/3+1/4+1/4+.....+1/n的和,要求与用户交互
Scanner scanner = new Scanner(System.in); System.out.println("请输入n"); int n = scanner.nextInt(); double sum = 0; for (double i = 1; i <= n; i++) { sum = sum + 1.0/i; } System.out.println(sum);
求9+99+999+9999+99999+......+9999999999的和
// 数列求和 long nine = 9; long result = nine; for (int i = 2; i <= 10; i++) { nine = nine * 10 + 9; result += nine; } System.out.println("9+99+999+...+9999999999=" + result);
将一个已经排好序的数组,现输入一个数,要求按原来的规律将它插入数组中
int[] a = {2,13,25,30,31,55,68}; int[] b = new int[a.length+1]; int i=0; for(i=0;i<a.length;i++){ System.out.print(a[i]+" "); } Scanner scan = new Scanner(System.in); int n = scan.nextInt(); if(n>=a[a.length-1]){ for(i=0;i<a.length;i++){ b[i] = a[i]; } b[b.length-1] = n; }else{ for(i=0;i<a.length;i++){ if(n>=a[i]){ b[i] = a[i]; }else{ b[i] = n; break; } } for(int j=i+1;j<b.length;j++){ b[j] = a[j-1]; } } for(i=0;i<b.length;i++){ System.out.print(b[i] + " "); }
直接选择排序
//第i次选取i到a.length-1中间最小的值放在i位置 int[] a = {1,3,42,5,77,6,43}; for(int i=0;i<a.length;i++){ int position = i; int tmp = a[i]; int j; for(j=i+1;j<a.length;j++){ if(tmp>a[j]){ tmp=a[j]; position = j; } } a[position] = a[i]; a[i] = tmp; } for(int i=0;i<a.length;i++){ System.out.println(a[i]); }
有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13.....求出这个数列的前20项之和
double j=2,k=1,t; double sum = 0; for(int i=1;i<=20;i++){ sum = sum + j/k; t = k; k = j; j = k+t; } System.out.println(sum);
有1,2,3,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!=k && i!=j && k!=j){ int num = i*100+j*10+k; System.out.print(num+" "); count++; } } } } System.out.println(count);
打印所有的水仙花数,所谓水仙花数,是指一个三位数字,其各位数字立方和等于该数本身。例如153是一个水仙花数,
因为:153=1的三次方+5的三次方+3的三次方
int a,b,c; for(int i=100;i<=999;i++){ a = i/100; b = i%100/10; c = i%10; int num = a*a*a+b*b*b+c*c*c; if(num == i){ System.out.println(i+"是水仙花数!"); } }