百钱买百鸡问题:
for (int i = 0; i < 20; i++) {
for (int j = 0; j < 34; j++) {
for (int k = 0; k <= 300; k++) {
if ((i + j + k) == 100 && ((5 * i + 3 * j + k / 3) == 100) && k % 3 == 0) {
System.out.println("\t公鸡:" + i + "\t母鸡:" + j + "\t小鸡" + k);
}
}
}
}
递归算法
for (int i = 1; i < 10; i++) {
System.out.print(getNumber(i) + "\t");
}
}
public static int getNumber(int number) {
if (number == 1 && number == 2) {
return 1;
} else {
return getNumber(number - 1) + getNumber(number - 2);
}
}
}
冒泡排序
import java.util.Arrays;
public class Animal {
//冒泡排序
public static void main(String[] args) {
int[] valus={3,1,6,2,9,0,7,4,5,8};
int temp=0;
for (int i=0;i<valus.length-1;i++){//需要排列的次数
boolean flag=true;
for (int j=0;j<valus.length-1-i;j++){//排列的交换次数
if (valus[j]>valus[j+1]){
temp=valus[j];
valus[j]=valus[j+1];
valus[j+1]=temp;
flag=false;
}
System.out.println(Arrays.toString(valus));
}
if (flag){
System.out.println("结束");
break;
}
System.out.println("############");
}
}
}
选择排序:
(1),选择排序工作原理:首先在未排序序列中找到最大(最小元素)元素,存放在排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最大(最小)元素,然后放到已排序序列末尾,以此类推,直到所有元素均排序完毕。
//选择排序
for (int i = 0; i <array.length; i++) {
for (int j=i+1;j<array.length;j++){
if (array[i]>array[j]){
int tmp=array[i];
array[i]=array[j];
array[j]=tmp;
}
}
}
for (int i = 0; i <array.length ; i++) {
System.out.println(array[i]+"\t");
}
十进制转换二进制
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个十进制的数");
int Number = sc.nextInt();
String str = " ";
while (Number != 0) {
int i = Number % 2;
str = i + str;
Number = Number / 2;
}
System.out.println(str);
数独
package com.io.sp;
import java.util.*;
/**
* @Auther:yyy
* @Date:2021/3/26 -03 -13:38
* @Descriptionn:com.io.sp
* @version:1.0
*/
public class Sudo {
/**
* 数独
* 1 3 3 4 5 6 7 8 9
* 1. [1, 2, 3, 4, 5, 6, 7, 8, 9]
* 2. [1, 2, 3, 4, 5, 6, 7, 8, 9]
* 3. [1, 2, 3, 4, 5, 6, 7, 8, 9]
* 4. [1, 2, 3, 4, 5, 6, 7, 8, 9]
* 5. [1, 2, 3, 4, 5, 6, 7, 8, 9]
* 6. [1, 2, 3, 4, 5, 6, 7, 8, 9]
* 7. [1, 2, 3, 4, 5, 6, 7, 8, 9]
* 8. [1, 2, 3, 4, 5, 6, 7, 8, 9]
* 9. [1, 2, 3, 4, 5, 6, 7, 8, 9]
*
*/
public static class Sud{
public static void main(String[] args) {
boolean flag = true;
while (flag) {
try {
start();
flag = false;
} catch (ArithmeticException e) {
System.out.println(e);
}
}
}
/**
* 开始生成数独
*/
private static void start(){
int[][] source = new int[9][9];
//第i行
for (int i=0; i<9; i++){
// 第i行中的第j个数字
for (int j=0; j<9; j++){
//第i行目前的数组
int[] row = Arrays.copyOf(source[i], j);
int[] column = new int[i];
for (int k=0; k<i; k++){
column[k] = source[k][j];
}
//所在宫
List<Integer> palaceList = new ArrayList<>();
//取整,获取宫所在数据
int palaceRow = i/3;
int palaceColumn = j/3;
for (int m=0; m<3; m++){
for (int n=0; n<3; n++){
palaceList.add(source[palaceRow*3+m][palaceColumn*3+n]);
}
}
source[i][j] = getNumber(row, column, palaceList.stream().mapToInt(Integer::intValue).toArray());;
}
}
//打印随机生成的数独数组
for (int i=0; i<source.length; i++){
System.out.println(Arrays.toString(source[i]));
}
}
/**
* 从即没有在行也没有在列中,选出一个随机数
* @param row
* @param column
* @return
*/
private static int getNumber(int[] row, int[] column, int[] palace ){
//数组合并,并去重,使用Set集合
Set<Integer> mergeSet = new HashSet<>();
for (int i=0; i<row.length; i++){
mergeSet.add(row[i]);
}
for (int j=0; j<column.length; j++){
mergeSet.add(column[j]);
}
for (int k=0; k<palace.length; k++){
mergeSet.add(palace[k]);
}
Set<Integer> source = new HashSet<>();
for (int m=1; m<10; m++){
source.add(m);
}
//取差集
source.removeAll(mergeSet);
int[] merge = source.stream().mapToInt(Integer::intValue).toArray();
//随机返回一个下标
return merge[getRandomCursor(merge.length)];
}
/**
* 获取一个随机下标
* @param length
* @return
*/
public static int getRandomCursor(int length) {
return Math.abs(new Random().nextInt())%length;
}
}
}