
Java
-x_x-
这个作者很懒,什么都没留下…
展开
-
环形涂色(未完)
如上图,组成环形的格子需要涂3种颜色。它们的编号分别是1~14相邻的格子不能用相同的颜色。涂色方案的数目是:24576当格子数目为n的时候,求涂色方案总数。我不知道怎么解决最后一个格子和第一个格子颜色冲突的问题,但算n=14时确实答案正确,好奇怪。解:public class Main { public static void main(String[] args) { Scanner i...原创 2018-03-29 13:18:48 · 1714 阅读 · 0 评论 -
质数
输入n,打印从1~n中的质数。(有两个方法)输入:10输出:2 3 5 7 2 3 5 7 解:public class Main { static boolean isPrime(int n) {// 判断是否为质数 if (n == 2)// 2是质数 return true; if (n <= 1 || n % 2 == 0)// 小于等于1不是质...原创 2018-03-18 23:20:48 · 214 阅读 · 0 评论 -
一些关于Java的小东西(3)
1、求45读的正弦 Math.sin(Math.toRadians(45)) toRadians() 方法用于将角度转换为弧度。2、Math.sqrt(n) 开方 Math.pow(n,2) 平方3、当double要变成int时,要+0.5后再变, 否则可能会出现:n = 0.999999,int后变成0 例:m=Math.sqrt(n); ...原创 2018-03-05 20:34:54 · 299 阅读 · 0 评论 -
一些关于Java的小东西(2)
1、Arrays.fill(数组名, 数字); 这样可以给数组全部赋一个值 (数组名,开始位,结束位(不包括),数字)2、Arrays.sort(a); 对数组a从小到大排序3、public static String fun(String s) { char[] c = s.toCharArray(); Arrays.s...原创 2018-03-05 20:23:27 · 219 阅读 · 0 评论 -
WIFI密码
下面是微博上流传的一张照片:“各位亲爱的同学们,鉴于大家有时需要使用wifi,又怕耽误亲们的学习,现将wifi密码设置为下列数学题答案:A-1;B-2;C-3;D-4;请同学们自己作答,每两日一换。谢谢合作!!~”—— 老师们为了促进学生学习也是拼了…… 本题就要求你写程序把一系列题目的答案按照卷子上给出的对应关系翻译成wifi的密码。这里简单假设每道选择题都有4个选项,有且只有1个正确答案。输入...原创 2018-03-12 18:58:49 · 579 阅读 · 0 评论 -
分数
分数格式:a/b输入:分子1:2 分母1:4 分子2:3 分母2:9输出:分数1化简结果:1/2 分数1 + 分数2 = 5/6 分数1 * 分数2 = 1/6public class Main { static Fen huajian(Fen f) {// 分数化简 // 如果分母为负数,令分子和分...原创 2018-03-18 10:53:53 · 361 阅读 · 0 评论 -
LinkedList独特的遍历方法
首先创建LinkedList并塞入数据LinkedList<String> list = new LinkedList<>(); list.add("James"); list.add("Irving"); list.addFirst("Curry"); list.poll();然后就可以用类似遍历栈的遍历方式了while (!list.isEmpty()) { ...原创 2018-02-25 19:47:00 · 689 阅读 · 0 评论 -
最大公约数和最小公倍数
题目描述输入两个正整数,求其最大公约数和最小公倍数。输入测试数据有多组,每组输入两个正整数。输出对于每组输入,请输出其最大公约数和最小公倍数。样例输入6 9样例输出最大公约数:3最小公倍数:18解:public class Main { static int fun(int a, int b) {// 辗转相除法递归写法 if (b == 0) return a; else ...原创 2018-03-17 18:54:39 · 413 阅读 · 0 评论 -
三种遍历ArrayList的方法
首先创建ArrayList和插入数据:ArrayList<String> a = new ArrayList<>();a.add("James");a.add("Love");a.add("Wade");a.add(1, "dont");a.remove("dont");//System.out.println(a.contains(&quo原创 2018-02-25 11:38:23 · 601 阅读 · 0 评论 -
铁轨
问题描述:某城市有一个火车站。铁轨铺设如图所示。有N节车厢从A方向驶入车站,按进站顺序编号为1~n。你的任务是让他们按照某种特定的顺序进入B方向的铁轨并驶出车站。为了重组车厢,可以借助中转站C,对于每个车,一旦进入c就不能再进入A,一旦c进入B就不能回到c。测试数据输入样例: 5 5 4 3 2 1 6 6 5 4 3 2 1 5 5 4 1 2 3输出样例: ...原创 2018-02-25 00:15:30 · 501 阅读 · 0 评论 -
two pointers
two pointers是利用问题本身与序列的特性,使用两个下标i、j对序列进行扫描(可以同向或反向),以较低的复杂度解决问题。例:给定一个递增的正整数序列和一个正整数M,求序列中的两个不同位置的数a和b,使它们的和恰好为X,输出所有满足条件的方案。例如给定序列{1,2,3,4,5,6,7,8,9}和x=5,就存在 1+4=5 和 2+3=5 成立。解:public class Main { ...原创 2018-03-17 12:23:43 · 231 阅读 · 0 评论 -
卡片游戏
题目:桌上有一叠牌,从第一张牌(即位于顶面的牌)开始从上往下依次编号1~n。当至少还剩下两张牌时进行以下操作:把第一张牌扔掉,然后把新的第一张牌放到整叠牌的最后,输入n,输出每次扔掉的牌,以及最后剩下的牌。 样例输入: 7 样例输出: 1 3 5 7 4 2 6解:public class TryOneTry { static Queue<Integer> q = new Link...原创 2018-02-24 16:04:14 · 1217 阅读 · 0 评论 -
一些关于Java的小东西(4)
1、StringBuilder sb = new StringBuilder("www."); sb.append("baidu."); sb.append("com"); sb = sb.reverse(); 输出:moc.udiab.www2、Date d = new Date(); SimpleDateFormat sd = new SimpleDat...原创 2018-03-05 23:20:07 · 309 阅读 · 0 评论 -
扩展欧几里德算法(半成品)
欧几里德有个很有用的定理: gcd(a, b) = gcd(b , a%b) 这样,我们就可以很快求解出来 a 和 b 的最大公约数而不需要枚举了。例:public class Main { static int gcd(int a, int b) { if (b == 0) return a; else return gcd(b, a % b); } public ...原创 2018-03-22 22:34:27 · 254 阅读 · 0 评论 -
深度优先搜索
深度优先搜索是一种枚举所有完整路径以遍历所有情况的搜索方法。从起点开始前进,当碰到岔道口时,总是选择其中一条岔路前进,在岔路上如果又遇到新的岔道口,仍然选择新岔道口的其中一条岔路前进,直到碰到死胡同才回退到最近的岔道口选择另一条岔路。(当碰到岔道口时,总是以“深度”作为前进的关键词,不碰到死胡同就不回头)例1:有n件物品,每件物品重量为w[i],价值为v[i]。现在需要选出若干物品放入一个容量为b...原创 2018-03-19 20:06:49 · 291 阅读 · 0 评论 -
分治
分治,字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。在计算机科学中,分治法就是运用分治思想的一种很重要的算法。分治法是很多高效算法的基础,如排序算法(快速排序,归并排序)等等。例1:二分查找已知有序的序列,比如:2,3,3,5,9,9,9,12,12,13,15,22...原创 2018-03-29 01:11:46 · 258 阅读 · 0 评论 -
博弈问题
无偏博弈没有平局,没有局势的好坏例:取球博弈今盒里有n个小球,A、B两人轮流从盒中取球。每个人都可以看到另一个人取了多少个,也可以看到盒中还剩下多少个。两人都很聪明,不会做出错误的判断。每个人从盒子中取出的球的数目必须是:1,3,7或者8个。轮到某一方取球时不能弃权!A先取球,然后双方交替取球,直到取完。被迫拿到最后一个球的一方为负方(输方)编程确定出在双方都不判断失误的情况下,对于特定的初始球数...原创 2018-03-27 03:20:59 · 366 阅读 · 0 评论 -
组合
组合是从n个不同元素中,任取m(m<=n)个元素并成一组。例:从a个球中选b个球解:public class Main { // a个不同的球中取b个 static int fun(int a, int b) { if (a == b || b == 0) return 1; return fun(a - 1, b - 1) + fun(a - 1, b); } p...原创 2018-03-26 17:28:41 · 275 阅读 · 2 评论 -
全排列
全排列是指所有个体参与排列,考虑顺序例如给定一个字符串,要求输出它的全排列解:public class Main { static void fun(char[] c, int k) {// c:待排序的字符串,k:当前要考虑的位置 // 到达最后一个字符的位置时,字符串已经无法改变,直接输出 if (k == c.length - 1) { System.out.println...原创 2018-03-26 14:14:45 · 290 阅读 · 0 评论 -
汉诺塔问题
汉诺塔问题[又称河内塔]是印度的一个古老的传说。据传开天辟地之神勃拉玛在一个庙里留下了三根金刚石的棒,第一根上面套着64个圆的金片,最大的一个在底下,其余一个比一个小,依次叠上去,庙里的众僧不倦地把它们一个个地从这根棒搬到另一根棒上,规定可利用中间的一根棒作为帮助,但每次只能搬一个,而且大的不能放在小的上面。就是这看似简单的问题,却困扰了人们千年以上。后来,这个传说就演变为汉诺塔游戏,玩法如下:1...原创 2018-03-25 22:34:20 · 380 阅读 · 0 评论 -
递归的应用
问:同一平面内n条直线最多几个交点?1条线是0,2条线是1,3条线是3......很简单,用递归即可解决,不需要用数学知识。解:public class Main { static int fun(int n) { if (n == 1) return 0; return fun(n - 1) + (n - 1); } public static void main(Str...原创 2018-03-25 00:34:20 · 417 阅读 · 0 评论 -
动态规划例题:最长不下降子序列c序列
问题:在一个数字序列中,找到最长的子序列(可以不连续),使得这个子序列是不下降(非递减)的。求出此序列的长度。输入:8 1 2 3 -9 3 9 0 11输出:6 (即:1 2 3 3 9 11)解:public class Main { public static void main(String[] args) { Scanner in = ...原创 2018-03-20 19:44:52 · 2436 阅读 · 1 评论 -
动态规划例题:最大连续子序列和
问题:给定一个数字序列a1, a2,..., an, 求i,j(1<=i<=j<=n),使得ai + ... + aj 最大,输出这个最大和。输入:6 -2 11 -4 13 -5 -2输出:20解:public class Main { public static void main(String[] args) { Scanner in = new ...原创 2018-03-20 18:26:45 · 851 阅读 · 0 评论 -
插入排序
例:输入:5 3 2 1 5 4输出:1 2 3 4 5解:public class Main { public static void insertSort(int[] a) {// 从第二个元素开始 for (int i = 1; i < a.length; i++) { int temp = a[i]; int j = i; while (j...原创 2018-03-14 15:51:20 · 149 阅读 · 0 评论 -
输出PATest
给定一个长度不超过10000的、仅由英文字母构成的字符串。请将字符重新调整顺序,按“PATestPATest....”这样的顺序输出,并忽略其它字符。当然,六种字符的个数不一定是一样多的,若某种字符已经输出完,则余下的字符仍按PATest的顺序打印,直到所有字符都被输出。输入格式:输入在一行中给出一个长度不超过10000的、仅由英文字母构成的非空字符串。输出格式:在一行中按题目要求输出排序后的字符...原创 2018-03-13 22:05:32 · 345 阅读 · 0 评论 -
动态规划
动态规划是一种用来解决一类最优化问题的算法思想。将一个复杂的问题分解成若干个子问题,通过综合子问题的最优解来得到原问题的最优解。动态规划会将每个求解过的子问题的解记录下来,这样当下一次碰到同样的子问题时,就可以直接使用之前记录的结果,而不是重复计算。如何记录子问题的解?例:斐波那契数列的定义:F0=1,F1=1,Fn = Fn-1 + Fn-2 (n>=2)public class Main...原创 2018-03-19 22:28:57 · 343 阅读 · 0 评论 -
进制转换
十进制转转成其它进制解:public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); ArrayList<Integer> a = new ArrayList<>();// 存放进制数y的每一位 int x = in.next...原创 2018-03-10 22:48:03 · 266 阅读 · 0 评论 -
n皇后问题
首先,可归纳问题的条件为,n皇后之间需满足: 1.不在同一行上 2.不在同一列上 3.不在同一斜线上 4.不在同一反斜线上输入:4输出:第1种摆法 + + Q + Q + + + + + + Q + Q + + 第2种摆...原创 2018-03-03 00:46:41 · 335 阅读 · 1 评论 -
二维数组对角线
二维数组(N*N),沿主对角线方向,从右上角打印到左下角输入:3 1 2 3 4 5 6 7 8 9 输出:3 2 6 1 5 9 4 8 7 解:public class Main { public static void main(String[] arg...原创 2018-03-02 22:50:56 · 6784 阅读 · 0 评论 -
散列
散列的解释:将元素通过一个函数转换为整数,使该整数可以尽量唯一地代表这个元素。如果元素在转换前为key,那么转换后就是一个整数H(key).key是整数的情况下:1、直接定址法 直接把key作为数组下标(或是线性变换 H(key)=a*key+b)2、除留取余法 把key除以一个数mod得到的余数作为hash值的方法 即: H(key) = key % mod 字...原创 2018-03-15 18:00:41 · 253 阅读 · 0 评论 -
螺旋矩阵
本题要求将给定的N个正整数按非递增的顺序,填入“螺旋矩阵”。所谓“螺旋矩阵”,是指从左上角第1个格子开始,按顺时针螺旋方向填充。要求矩阵的规模为m行n列,满足条件:m*n等于N;m>=n;且m-n取所有可能值中的最小值。输入格式:输入在第1行中给出一个正整数N,第2行给出N个待填充的正整数。所有数字不超过104,相邻数字以空格分隔。输出格式:输出螺旋矩阵。每行n个数字,共m行。相邻数字以1个...原创 2018-03-15 15:13:25 · 388 阅读 · 0 评论 -
1~n的排列
输入:3输出:123 132 213 231 312 321解:public class Main { public static void fun(int n, int[] a, int cur) { if (cur == n) { for (int i = 0; i < n; i++) System.out.print(a[i]); System.out.pr...原创 2018-03-01 11:26:51 · 330 阅读 · 0 评论 -
素数环
输入正整数n,把整数1,2,3,。。。,n 组成一个环,使得相邻连个整数之间和均为素数。输出时从整数1开始逆时针排列。同一个环应恰好输出一次。n<=16。样例输入:6样例输出:1 4 3 2 5 6 1 6 5 2 3 4解:public class Main { static int n; static int[] a; static int[] b...原创 2018-03-08 23:54:00 · 433 阅读 · 0 评论 -
分数拆分
问题:输入正整数k,找到所有的正整数x>=y,使得1/k = 1/ x + 1/y.样例输入:2 输出:1/2=1/6+1/3 1/2=1/4+1/4 样例输入:12 输出:1/12=1/156+1/13 1/12=1/84+1/14 1/12=1/60+1/15 1/12=1/48+1/16...原创 2018-02-28 11:23:17 · 297 阅读 · 0 评论 -
Pattern和Matcher
Pattern类用于创建一个正则表达式,也可以说是创建一个匹配模式。Pattern的基础用法:Pattern p = Pattern.compile("China");String s = "123China456China789China";String[] a = p.split(s);for (String b : a) { System.out.print(b);}输出:1234...原创 2018-03-07 21:47:32 · 204 阅读 · 0 评论 -
乘积最大的连续子序列
问题:输入n个元素组成的序列S,你需要找出一个乘积最大的连续子序列。如果这个最大的乘积不是正数,应该输出-1(表示无解)。(可以输入小数,输出保留两位小数)输入: 3 2 4 -3输出: 8.00输入: 5 2 5 -1 2 -1输出: 20.00解:public class Main { public static void main(String[] args...原创 2018-02-26 22:25:22 · 1408 阅读 · 0 评论 -
abcde / fghij = n
问题:输入正整数n,按从小到大的顺序输出所有形如abcde/fghij=n的表达式,其中a~j恰好为数字0~9的一个排列,2<=n<=79。样例输入: 62样例输出: 79546/01238=62 94736/01528=62解:public class Main { static int[] a = new int[10]; public ...原创 2018-02-26 21:00:18 · 2053 阅读 · 0 评论 -
震惊!!!Java创建数组千万不能这样写!!!
真的惊了!!!原来还会这样!!!如果想创建两个数组时,千万不能:a = b = new int[5];后面如果你给a或b的某个下标赋值(例如:a[0]=4;),那么另一个的那个下标的值也会改变(b[0]会自动变成4)。所以创建数组时要分开创建!原创 2018-01-29 12:03:20 · 257 阅读 · 1 评论 -
用while+if实现for循环
public class Test { public static void main(String[] args) { int a = 3; int b = 0; while (a == 3) { if (a == b++) { System.out.println("这里是if里面"); a = 4; } System.out.println("原创 2018-01-26 11:27:07 · 1954 阅读 · 0 评论 -
输入翻转
例如:输入是“abc”,则输出是“cba”。public class Main { public static void main(String[] args) { Scanner out = new Scanner(System.in); try { String a = out.next(); for (int i = a.length(); i > 0; i--)原创 2018-01-30 23:55:33 · 248 阅读 · 0 评论