算法题随笔
文章平均质量分 72
mz314
这个作者很懒,什么都没留下…
展开
-
C\C++,用不带头结点的循坏列表实现约瑟夫问题
编号为1,2,3,…,n的n个人按顺序针方向围坐一张圆桌旁,每个人手中持有一个密码(正整数)。首先输入一个正整数作为报数上限值m,然后,从第一个人开始按顺序针方向自1开始顺序报数,报到m的人离开桌子,并将他手中的密码作为新的m值,从顺序针方向的下一个就坐在桌旁的人开始重新从1报数,如此下去,直至所有人全部离开桌旁为止。算法思想:用单循环链表来解决这一问题。实现的方法原创 2016-11-09 19:06:10 · 798 阅读 · 0 评论 -
求400以内的Smith数,用循坏解决(还未用递归)
Smith数是指满足下列条件的可分解的整数:其所有数位上的数字和=其全部素数因子的数字总和例如,9975是Smith数,9975=3*5*5*7*19,即9975的数字和=因子的数字总和=30在找寻一个合数的所有质因子时,采用的是循环的方法。import java.util.ArrayList;import java.util.List;public class Test1原创 2017-03-19 17:03:57 · 4066 阅读 · 0 评论 -
寻找一个数组中出现次数为奇数次的一个数
寻找一个数组中出现次数为奇数次的一个数,采用异或的方法解决。原理:相同的两个数异或会抵消public class Test1 { public static void main(String[] args) { int[] m = {9, 4, 9, 5, 4, 5, 7}; // 声明一个变量储存最后的结果 int r = 0; for (int e : m原创 2017-03-10 18:58:01 · 1004 阅读 · 0 评论 -
求数组中连续子元素的最大值(动态规划)
求数组中连续子元素的最大值方法一:利用动态规划的思想。public class Test2 { public static void main(String[] args) { int[] m ={3, -5, 7, 9, -1, 4, -40, 12, -2, 13, 2, -13, 10}; int currentSum = 0; int maxSum = 0; fo原创 2017-03-10 19:20:05 · 898 阅读 · 0 评论 -
洗牌!打乱一组有序数
将一个有序数组打乱方法一:利用随机得到的索引一次交换import java.util.Arrays;public class Test3 { public static void main(String[] args) { int[] m = new int[20]; // 创建一个有序数组 for (int i = 0; i < 20; i++) { m[i] =原创 2017-03-10 19:48:26 · 389 阅读 · 0 评论 -
人民币小写转化为大写转换(解决中间多个0的问题)
输入人民币小写转化成大写。若输入1003,输出 一千零三元。import java.util.Scanner;import java.util.Arrays;public class Test4 { public static void main(String[] args) { // 数据 char[] zi = {'零', '壹', '贰', '叁', '肆',原创 2017-03-13 19:21:10 · 1054 阅读 · 0 评论 -
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。补码 = 反码 + 1;牛客网上的题目,自己做的时候,只能求出正数的二进制中 1 的个数,而负数才用补码表示,便没有完整实现出来。遂在网上看到了两个很好的解法于是便记录下来了。解法一:public class Solution { public int NumberOf1(int n) {原创 2017-04-20 17:02:29 · 584 阅读 · 0 评论