简单算法总结

冒泡排序法

	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+"是水仙花数!");
			}
		}

 

posted @ 2015-12-06 13:19  King_J  阅读(275)  评论(0编辑  收藏  举报