报名了蓝桥杯,但是对于算法的基础却不是很好,收集了一些学习的链接,以下链接都是转载自别人名下的博客文章,如果博主介意的话,请通知我立即删除。
供日后复习时使用:
前部分是摘录自:庞俊伟的博客
1.Java十进制数与其余进制数转换问题
2.进制转化知识完成各进制之间的转化
3.JAVA高精度数值运算方法,小数点后保留位数,结合相关例题进行介绍!
4.JAVA全排列
(这个有点理解不了。。。。。。)
5.入门训练(序列求和,圆的面积,Fibonacci数列)JAVA代码
6.数组排列(JAVA语言实现)
7.基础训练–特殊回文数,特殊的数字,回文数(JAVA)
文章中的代码缺少了限制条件,题目中要求的四位数 五位数,六位数没有加入限制条件,会导致输出的内容里包含位数少于题目的数据。可以在集合arraylist添加数据的前面加入一条判断语句,if(代加入的数 >10000),这样就可以避免添加一些较小的数据了。
唯一不解的是由于符合条件的数据较多,看着比较乱,在输出的时候,加一个条件,每行输出10个数据,之后加入一个换行,但是这个条件语句加入之后,导致程序明显慢了很多。。。。甚至半天了还是没有输出数据
8.基础训练–杨辉三角、查找整数,数列特征、01字串–Method
需要注意一点:for循环的起时值,赋值是外层循环从2开始,内层是从0开始。
文章中杨辉三角的代码块中有瑕疵,for语句嵌套循环赋值和输出时,内层循环为for(int j=0; j <= i; j++),否则将导致每行的最后一个1无法输出
9.基础训练–贪心Huffman树、字母图形–讲解
此处的贪心Huffuman方法有错误,可以借鉴下面的方法,个人感觉思路比较清晰:
import java.util.Arrays;
import java.util.ArrayList;
import java.util.Scanner;
public class huffuman
{
//贪心Huffuman方法
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int n = sc.nextInt(); //第一行先确定输入的个数
ArrayList<Integer> arraylist = new ArrayList<>();
for (int i=0; i<n; i++ ) //将待计算的数据加入到集合中
{
arraylist.add(sc.nextInt());
}
int sum = 0; //初始化消耗的费用
while (arraylist.size() > 1)
{
Object[] temp = arraylist.toArray(); //将集合转换为数组
Arrays.sort(temp); //排序
arraylist.removeAll(arraylist); //删除原来的数据,将排好序的数组加到集合里面
for (int i=0; i < temp.length; i++ )
{
arraylist.add((Integer)temp[i]);
}
int a = arraylist.get(0) + arraylist.get(1); 保存此次排序的两个最小值之和
sum += a; //费用累加
//这里两次删除第一个元素,即删掉了原来排序中最小的两个数值
arraylist.remove(0);
arraylist.remove(0);
//将最小值的和添加到集合当中去
arraylist.add(a);
}
System.out.println(sum);
}
}
图形这个实在是理解不了,第一行遍历的时候:c[i] = (char)’B’ + i 为什么是B而不是A呢?试了一下,用A的话,第一行输出的第一个元素就是@了而不是A
//2018/3/18编辑:今天翻阅代码时,在第一次for循环之后打印出数组发现,第一次初始化数组后数组为:BCDEFGH,这样在后面的每行输出时,针对这一行的数据,加上行数和输出下标的判断条件 就可以改变输出的数据了
10.2n皇后—-(回溯法,Java)
看了很多这道题的解法,就数这个博主的注释很多,但是还是有点不太理解,记录下来,以后接着学习。