关于java的基础教程

百钱买百鸡问题:

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;

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值