小景哥哥

世界很大,而我们还需要再成长!

强烈推荐

1011. A+B和C (15)-浙大PAT乙级真题java实现

    1011. A+B和C (15)
    给定区间[-2^31, 2^31]内的3个整数A、B和C,请判断A+B是否大于C。
    输入格式:
    输入第1行给出正整数T(<=10),是测试用例的个数。随后给出T组测试用例,每组占一行,顺序给出A、B和C。整数间以空格分隔。
    输出格式:
    对每组测试用例,在一行中输出“Case #X: true”如果A+B>C,否则输出“Case #X: false”,其中X是测试用例的编号(从1开始)。
    输入样例:
    4
    1 2 3
    2 3 4
    2147483647 0 2147483646
    0 -2147483648 -2147483647
    输出样例:
    Case #1: false
    Case #2: true
    Case #3: true

    Case #4: false


    阅读全文>>

作者:Jason分类:【pat浏览(298评论(0

2018-01-04

1045. 快速排序(25)-浙大PAT乙级真题java实现

    1045. 快速排序(25) 
    著名的快速排序算法里有一个经典的划分过程:我们通常采用某种方法取一个元素作为主元,通过交换,把比主元小的元素放到它的左边,比主元大的元素放到它的右边。 给定划分后的N个互不相同的正整数的排列,请问有多少个元素可能是划分前选取的主元? 
    例如给定N = 5, 排列是1、3、2、4、5。则: 
    1的左边没有元素,右边的元素都比它大,所以它可能是主元; 
    尽管3的左边元素都比它小,但是它右边的2它小,所以它不能是主元; 
    尽管2的右边元素都比它大,但其左边的3比它大,所以它不能是主元; 
    类似原因,4和5都可能是主元。 
    因此,有3个元素可能是主元。 
    输入格式: 
    输入在第1行中给出一个正整数N(<= 105); 第2行是空格分隔的N个不同的正整数,每个数不超过109。 
    输出格式: 
    在第1行中输出有可能是主元的元素个数;在第2行中按递增顺序输出这些元素,其间以1个空格分隔,行末不得有多余空格。 
    输入样例: 

    1 3 2 4 5 
    输出样例: 

    1 4 5


    分析:对原序列sort排序,逐个比较,排序前后元素没有变化,并且它左边的所有值的最大值都比它小的时候它一定是主元。


    阅读全文>>

作者:Jason分类:【pat浏览(320评论(0

2018-01-24

1058. 选择题(20)--PAT乙级真题java实现

    1058. 选择题(20)–PAT乙级真题java实现

    批改多选题是比较麻烦的事情,本题就请你写个程序帮助老师批改多选题,并且指出哪道题错的人最多。

    输入格式:

    输入在第一行给出两个正整数N(<=1000)和M(<=100),分别是学生人数和多选题的个数。随后M行,每行顺次给出一道题的满分值(不超过5的正整数)、选项个数(不少于2且不超过5的正整数)、正确选项个数(不超过选项个数的正整数)、所有正确选项。注意每题的选项从小写英文字母a开始顺次排列。各项间以1个空格分隔。最后N行,每行给出一个学生的答题情况,其每题答案格式为“(选中的选项个数 选项1 ……)”,按题目顺序给出。注意:题目保证学生的答题情况是合法的,即不存在选中的选项数超过实际选项数的情况。

    输出格式:

    按照输入的顺序给出每个学生的得分,每个分数占一行。注意判题时只有选择全部正确才能得到该题的分数。最后一行输出错得最多的题目的错误次数和编号(题目按照输入的顺序从1开始编号)。如果有并列,则按编号递增顺序输出。数字间用空格分隔,行首尾不得有多余空格。如果所有题目都没有人错,则在最后一行输出“Too simple”。

    输入样例:

    3 4

    3 4 2 a c

    2 5 1 b

    5 3 2 b c

    1 5 4 a b d e

    (2 a c) (2 b d) (2 a c) (3 a b e)

    (2 a c) (1 b) (2 a b) (4 a b d e)

    (2 b d) (1 e) (2 b c) (4 a b c d)

    输出样例:

    3

    6

    5

    2 2 3 4

    package top.jinglisen.pat;
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    public class Main {
        public static void main(String[] args) throws IOException{
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            String[] s = br.readLine().split(" ");
            int n = Integer.parseInt(s[0]);//学生人数
            int m = Integer.parseInt(s[1]);//题目总数
            int[] score = new int[m];//每道题的总分
            int[] wrong = new int[m];//每道题做错人数
            String[] right = new String[m];//每道题的正确答案
            for(int i = 0; i < m; i++) {
                String str = br.readLine();
                score[i] = Integer.parseInt(str.substring(0, 1));
                right[i] = str.substring(4);
            }
            int[] total = new int[n];//学生成绩总分
            for(int i = 0; i < n; i++) {
                String t = br.readLine();
                t = t.substring(t.indexOf('(') + 1, t.lastIndexOf(')'));
                String[] d = t.split("\\)\\s*\\(");
                for(int j = 0; j < d.length;j++) {
                    if(d[j].equals(right[j])) {
                        total[i] += score[j];
                    }else {
                        wrong[j]++;
                    }
                }
                System.out.println(total[i]);
            }
            int maxIndex = 0;
            for(int i = 1; i < m; i++) {
                if(wrong[maxIndex] < wrong[i])
                    maxIndex = i;
            }
            if(wrong[maxIndex] == 0) {
                System.out.println("Too simple");
            }else {
                System.out.print(wrong[maxIndex]);
                for(int i = 0; i < m; i++) {
                    if(wrong[i] == wrong[maxIndex]) {
                        System.out.printf(" %d", i + 1);
                    }
                }
            }
        }
    }
    阅读全文>>

作者:Jason分类:【pat浏览(210评论(0

2018-09-08

1044. 火星数字(20)-浙大PAT乙级真题java实现

    1044. 火星数字(20) 
    火星人是以13进制计数的:地球人的0被火星人称为tret。地球人数字1到12的火星文分别为:jan, feb, mar, apr, may, jun, jly, aug, sep, oct, nov, dec。火星人将进位以后的12个高位数字分别称为:tam, hel, maa, huh, tou, kes, hei, elo, syy, lok, mer, jou。例如地球人的数字“29”翻译成火星文就是“hel mar”;而火星文“elo nov”对应地球数字“115”。为了方便交流,请你编写程序实现地球和火星数字之间的互译。 
    输入格式: 
    输入第一行给出一个正整数N(<100),随后N行,每行给出一个[0, 169)区间内的数字 —— 或者是地球文,或者是火星文。 
    输出格式: 
    对应输入的每一行,在一行中输出翻译后的另一种语言的数字。 
    输入样例: 

    29 

    elo nov 
    tam 
    输出样例: 
    hel mar 
    may 
    115 
    13


    阅读全文>>

作者:Jason分类:【pat浏览(299评论(0

2018-01-24

哈尔滨工业大学计算机考研854真题-哈尔滨工业大学 2017年硕士研究生入学考试试题

作者:Jason分类:【HIT浏览(598评论(0

2018-01-04

1023. 组个最小数 (20)-浙大PAT乙级真题java实现

    1023. 组个最小数 (20) 
    给定数字0-9各若干个。你可以以任意顺序排列这些数字,但必须全部使用。目标是使得最后得到的数尽可能小(注意0不能做首位)。例如:给定两个0,两个1,三个5,一个8,我们得到的最小的数就是10015558。现给定数字,请编写程序输出能够组成的最小的数。 
    输入格式: 
    每个输入包含1个测试用例。每个测试用例在一行中给出10个非负整数,顺序表示我们拥 
    有数字0、数字1、……数字9的个数。整数间用一个空格分隔。10个数字的总个数不超过50,且至少拥有1个非0的数字。 
    输出格式: 
    在一行中输出能够组成的最小的数。 
    输入样例: 
    2 2 0 0 0 3 0 0 1 0 
    输出样例: 
    10015558


    阅读全文>>

作者:Jason分类:【pat浏览(232评论(0

2018-01-17

二叉树的镜像

    18.二叉树的镜像
     
    题目描述
    操作给定的二叉树,将其变换为源二叉树的镜像。
    输入描述:
    二叉树的镜像定义:源二叉树 
            8
           /  \
          6   10
          / \  / \
        5  7 9 11
        镜像二叉树
            8
           /  \
         10   6
          / \  / \
       11 9 7  5
    解题思路:采用递归。递归交换左右子树,直到左右子树都为空,此时也就是树的叶子结点。
     
    public class TreeNode {
        int val = 0;
        TreeNode left = null;
        TreeNode right = null;
        public TreeNode(int val) {
            this.val = val;
        }
    }
    public class Solution {
        public void Mirror(TreeNode root) {
            LRMirror(root);
        }
        public TreeNode LRMirror(TreeNode root){
            if(root == null)
                return root;
            TreeNode temp = root.left;
            root.left = LRMirror(root.right);
            root.right = LRMirror(temp);
            return root;
        }
    }
    阅读全文>>

作者:Jason分类:【offer浏览(210评论(0

2018-08-13

刻意人生

    当说到完美人生的时候,肯定不是说咸鱼翻身,升职加薪,当上总经理,出任CEO,迎娶白富美,走上人生巅峰,获得完美人生。人生在世,一帆风顺的人生是不存在的也是没有意义的。但是当我们刻意去追寻一种我们想要的生活时,就能在刻意努力中获得趋于完美的结局,这是一个正态均匀分布。

    完美人生并不是风平浪静的享受,刻意完美即完整,体验过美好也体验过苦涩,懂得付出也乐于享受,经历过风风雨雨也热衷于平平淡淡,Be a man who has known human joys and sorrows, and has achieved whatever work it was in him to do.

    我们的普世价值观好像都是倾向于完美,上完美的大学,找完美的爱人,做完美的工作……我们每个人都不是十全十美的,我们经历过的事儿,说过的话也不是完美的,所以注定会完美地落空。刻意是一种态度,刻意去追求一种精神境界,即使达不到你想要的高度,但也会在这个过程中趋于心中的目标极点,就像函数收敛无限接近的时候,那和完美没什么两样,就如100%和99.99%的概念是一样的,根据概率论的中心大数定理,不管你用切比雪夫大数定理还是用辛钦大数定理,我们可以用99.99%的概率来模拟描述那个真切的100%,极大似然估计并不是完全没有意义的啊。

    情怀不分贵贱,生活没有高低。人生不在于你出发的时候有多糟糕,也不在于你在人生的前一阶段有多糟糕,而在于你在你想优雅的活着的时候,刻意付出的代价与努力,即使脚在淤泥里,心也要向光明。虽然有句催人心寒的古话说,努力了不一定成功,(你放心,我肯定不会说不努力一定失败),可是根据bayes概率统计模型,我们知道,你成功的概率在你努力的前提下,那是极大的提高啊,条件概率就是定理啊,定理是啥?定理就是无需证明的真理!即使你不相信贝叶斯,那你总要相信马尔科夫吧,马尔科夫链式法则告诉我们,你前面步骤的概率越大,累加起来的概率也是越大的啊,即使你说你不懂,但是你肯定听说过马尔科夫数据模型,要不人口增长我们怎么预测,家喻户晓的马尔科夫是现实中真真切切的真理啊,比马克思还真。

    很多时候,我们总是,持续性的混吃等死,间接性的踌躇满志。我们的普世价值观好像在什么时候出现了不可描述的问题,可我们还浑然不知,就像温水煮青蛙,最后已经被现实蒙骗而不自知。我是一个非常接地气的人,平时说话都是趴着那种,所以我说的话都是妇孺皆知的大白话,即使像RNN这样的网络都知道要借鉴先前的数值来描述当下的模型,而且还会把当下的权值和偏移量传递下去,那我们岂不是也是一样的么?不要因为害怕遍体鳞伤,而拒绝了本可以实现的飞翔。你不刻意改变,没人为你坚强!虽然别人有背景,可是你有刻意努力的背影啊。舒适感是成长最大的敌人,而痛苦才是成长的标志。最好的投资就是投资现在,迎接未来。尽你所能,刻意seize the moment,就像死亡诗社里的罗宾·威廉姆斯一样,心中的珍惜时间刻意追求的意识从未泯灭。

    其实刻意人生就像数学,你不知道现在是微积分还是离散数学,就在你觉得连续性高涨的时候,社会就在不经意间离散了你的人生三观。当你还在纠结命题逻辑不知道怎么表达自己的时候,有些人早已开始了自己的归纳和推理,更有甚者已经开始了反证。其实每个人的一生都是一个函数,你把自己的努力作为定义域,映射出来的不一定是指数增长,也有可能是一个笛卡尔函数,其丰富性和灵活性就在于,婉转回旋的方程,总比你一个符号函数那样来的丰富和热烈。刻意的人生就在于其迂回蜿蜒,要是每个人都简简单单平平凡凡,那我们还费尽心思研究人生算法的复杂度干嘛?世界的丰富性就在于,有的人活的很自在,时间复杂度不是n的平方,也不是指数增长,而是对数递减,这就好比是你在sigmoid的时候,我早已构建出了消除梯度消失的Relu优化函数。

    我愿刻意生活,刻意改变,用我的归纳和递归,找到我自己的KMP匹配算法,来书写我的泰勒收敛函数展开式的刻意人生。

     

     

     

    阅读全文>>

作者:Jason分类:【人生浏览(391评论(0

2018-04-10

1028. 人口普查(20)-浙大PAT乙级真题java实现

    1028. 人口普查(20) 
    某城镇进行人口普查,得到了全体居民的生日。现请你写个程序,找出镇上最年长和最年轻的人。这里确保每个输入的日期都是合法的,但不一定是合理的——假设已知镇上没有超过200岁的老人,而今天是2014年9月6日,所以超过200岁的生日和未出生的生日都是不合理的,应该被过滤掉。 
    输入格式: 
    输入在第一行给出正整数N,取值在(0, 10^5];随后N行,每行给出1个人的姓名(由不超过5个英文字母组成的字符串)、以及按“yyyy/mm/dd”(即年/月/日)格式给出的生日。题目保证最年长和最年轻的人没有并列。 
    输出格式: 
    在一行中顺序输出有效生日的个数、最年长人和最年轻人的姓名,其间以空格分隔。 
    输入样例: 

    John 2001/05/12 
    Tom 1814/09/06 
    Ann 2121/01/30 
    James 1814/09/05 
    Steve 1967/11/20 
    输出样例: 
    3 Tom John


    阅读全文>>

作者:Jason分类:【pat浏览(280评论(0

2018-01-18

42.和为S的两个数字

    42.和为S的两个数字

    题目描述

    输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
    输出描述:
    对应每个测试案例,输出两个数,小的先输出。

     


    import java.util.ArrayList;
    import java.util.Collections;
    public class Solution {
        public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) {
            ArrayList<Integer> list = new ArrayList<Integer>();
            
            if(array.length < 1)
                return list;
            int ahead = array.length - 1;
            int behind = 0;
            
            while(ahead > behind){
                long curSum = array[ahead] + array[behind];
                if(curSum == sum){
                    list.add(array[ahead]);
                    list.add(array[behind]);
                    break;
                }else if(curSum > sum)
                    ahead--;
                else behind++;
            }
            Collections.sort(list);
            return list;
        }
    }

    阅读全文>>

作者:Jason分类:【offer浏览(222评论(0

2018-08-24