java 小算法
//鸡兔同笼 20个头 58腿 for(int a=0;a<=20;a++) { int b = 20-a; if((2*b+4*a)==58) { System.out.println(a+","+b); } }
//百钱买百鸡 公鸡 3 母鸡 2 小鸡一元三只 //方法一:这种方法是错的 原因c/3 这个根据钱的数量进行循环 for(int i=0;i<100;i++) { for(int j=0;j<100;j++) { int c = 100-i-j; if((i*3+j*2+c/3)==100) { System.out.println(i+","+j+","+c); } } }
//方法2:还可以根据数量进行循环 for(int a=0;a<=33;a++) { int x = (100-a*3)/2; //母鸡的数量 for(int b=0;b<=x;b++) { int c = 100-a-b; if(c%3!=0)continue; if((a*3+b*2+c/3)==100) { System.out.println(a+","+b+","+c); } } }
//冒泡排序 int[] a = {4,5,3,6,8,7,9}; for(int i=0;i<a.length-1;i++) { for(int j=0;j<a.length-1-i;j++) if(a[j]<a[j+1]) { int t=a[j]; a[j]=a[j+1]; a[j+1]=t; } } for(int i=0;i<a.length;i++) { System.out.print(a[i]+"\t"); }
//选择排序 int[] a = {1,5,3,6,8,7,9}; for(int i=0;i<a.length-1;i++) { for(int j=i+1;j<a.length;j++) { if(a[i]>a[j]) { int t = a[i]; a[i] = a[j]; a[j] =t; } } } for(int i=0;i<a.length;i++) { System.out.print(a[i]); }
public class departSort { public static void main(String[] args) { int[] a = {2,4,6,7,9}; //二分查找算法 System.out.println(search(a,7,0,a.length-1)); } private static int search(int[] a, int value, int start, int end) { // TODO Auto-generated method stub if(start>end) { return -1; } int middle = (start+end)/2; int middleValue = a[middle]; if(value>middleValue) { return search(a, value, middle+1, end); } else if(value<middleValue) { return search(a, value, start, middle-1); } else return middle; } }
//查重算法1 int[] a = {2,1,6,4,5,6,1,4,2}; int b = 012; System.out.println(b); //查重算法 112244566 Arrays.sort(a); boolean flag = false; for(int i=0;i<a.length-1;i+=2) { if(a[i]!=a[i+1]) { flag = true; System.out.println(a[i]); break; } } if(!flag) { System.out.println(a[a.length-1]); }
//查重算法二:充分利用异或相同为0不同为1 int[] a= {1,4,4,6,7,9,6,7,1}; int result=0; for(int i=0;i<a.length;i++) { result ^= a[i]; } System.out.println(result);
//桶排序 int[] a= {1,5,3,6,2,3,4,6,9}; int[] b = new int[21]; for(int i=0;i<a.length;i++) { b[a[i]]++; } for(int i=0;i<a.length;i++) { //b[i]中有几个数就循环打印几次 for(int j=1;j<=b[i];j++) { System.out.print(i+"\t"); } }
import java.util.Scanner; public class Test24{ public static void main(String[] args){ Scanner sc = new Scanner(System.in); int n = sc.nextInt(); for(int i=1;i<=n;i++){ for(int j=1;j<=n-(i-1);j++){ System.out.print(j+"\t"); } System.out.println(); } } }
import java.util.Scanner; public class Test25{ public static void main(String[] args){ System.out.println("请输入一个正整数:"); Scanner s = new Scanner(System.in); int n = s.nextInt(); for(int i=1;i<=n;i++){ for(int j=1;j<=n-i;j++){ System.out.print(" "); } for(int j=1;j<=2*i-1;j++){ System.out.print("*"); } System.out.println(); } } }
//. 验证哥德巴赫猜想:任何一个大于 6 的偶数,都能分解成两个质数的和。
//要求输入一个整数,输出 这个数能被分解成哪两个质数的和。
//例如:输入一个整数 14 输出结果:14=3+11 14=7+7
public class Exc13{ public static void main(String[] args){ java.util.Scanner s = new java.util.Scanner(System.in); int n= s.nextInt(); if (n <= 6 || n % 2 !=0) { System.out.println("输入有误"); return ; } //一个数的加数最多是这两个加数相同,否则必定会一个大于1/2另外一个小于1/2 //所以循环的时候只需要循环一个数的1/2即可只要找到一个必定会找到另外一个 for(int a = 3 ; a <= n/2 ; a+=2){ int b = n-a; //判断加数是不是质数 if (isPrime(a) && isPrime(b) ){ System.out.println(a+"+"+b); } } } public static boolean isPrime(int x){ double d = Math.sqrt(x); for(int i = 3 ; i <= d ; i+=2){ if (x % i == 0) return false; } return true; } }
12. 编程:如果整数 A 的全部因子(包括 1,不包括 A 本身)之和等于 B,且整数 B 的全部因子包
括 1,不包括 B 本身)之和等于 A,则称整数 A\B 是一对亲密数;求 3000 以内的全部亲密数。
public class Test12 {
public static void main(String[] args) {
for (int i = 1; i <= 3000; i++) {
int b = sumAllFact(i); // i的因子和为b
int a = sumAllFact(b); // b的因子和为a
// 分析:如果a == i,意味着a的因子和为b,
// b的因子和为a,满足亲密数的要求
// 同时,为了避免重复解,要求a < b
if (a < b && a == i) {
System.out.println(a + " " + b);
}
}
}
// 计算因子和的函数
public static int sumAllFact(int n) {
int sum = 0;
for (int i = 1; i <= n / 2; i++) {
if (n % i == 0)
sum += i;
}
return sum;
}
}
在国际象棋的棋盘上, 放置8个皇后, 要求任何两个皇后之间,不能相互吃掉, 请输出所有的放置的可能
public class EightQueen { public static void main(String[] args) { int[] a = new int[8]; //a[i]=j 第i行的皇后放在第j列 place(a , 0); } //计算第row行的皇后放在第几列 a[row]=? static void place(int[] a , int row){ if (row == 8) { for(int i = 0 ; i < 8 ; i++){ System.out.print(a[i]+"\t"); } System.out.println(); return; } //把第row行的皇后放好 outer:for(a[row] = 0; a[row] < 8;a[row]++){ //判断a[row] 和 前面的row行是不是冲突 for(int i = 0 ; i< row; i++){ //判断a[row] 和 a[i]是不是冲突 if(a[row]==a[i] || a[row]-a[i]==row-i || a[row]-a[i]==i-row) continue outer; } //放下一行 place(a , row+1); } } }