小景哥哥

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

强烈推荐

1025. 反转链表 (25)-浙大PAT乙级真题java实现

    1025. 反转链表 (25) 
    给定一个常数K以及一个单链表L,请编写程序将L中每K个结点反转。例如:给定L为1→2→3→4→5→6,K为3,则输出应该为3→2→1→6→5→4;如果K为4,则输出应该为4→3→2→1→5→6,即最后不到K个元素不反转。 
    输入格式: 
    每个输入包含1个测试用例。每个测试用例第1行给出第1个结点的地址、结点总个数正整数N(<= 10^5)、以及正整数K(<=N),即要求反转的子链结点的个数。结点的地址是5位非负整数,NULL地址用-1表示。 
    接下来有N行,每行格式为:Address Data Next 
    其中Address是结点地址,Data是该结点保存的整数数据,Next是下一结点的地址。 
    输出格式: 
    对每个测试用例,顺序输出反转后的链表,其上每个结点占一行,格式与输入相同。 
    输入样例: 
    00100 6 4 
    00000 4 99999 
    00100 1 12309 
    68237 6 -1 
    33218 3 00000 
    99999 5 68237 
    12309 2 33218 
    输出样例: 
    00000 4 33218 
    33218 3 12309 
    12309 2 00100 
    00100 1 99999 
    99999 5 68237 
    68237 6 -1


    阅读全文>>

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

2018-01-18

1040. 有几个PAT(25)-浙大PAT乙级真题java实现

    1040. 有几个PAT(25) 
    字符串APPAPT中包含了两个单词“PAT”,其中第一个PAT是第2位(P),第4位(A),第6位(T); 
    第二个PAT是第3位(P),第4位(A),第6位(T)。 
    现给定字符串,问一共可以形成多少个PAT? 
    输入格式: 
    输入只有一行,包含一个字符串,长度不超过105,只包含P、A、T三种字母。 
    输出格式: 
    在一行中输出给定字符串中包含多少个PAT。由于结果可能比较大,只输出对 
    1000000007取余数的结果。 
    输入样例: 
    APPAPT 
    输出样例: 
    2


    阅读全文>>

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

2018-01-23

45.扑克牌顺子

    45.扑克牌顺子
    题目描述
    LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)...他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿!!“红心A,黑桃3,小王,大王,方片5”,“Oh My God!”不是顺子.....LL不高兴了,他想了想,决定大\小 王可以看成任何数字,并且A看作1,J为11,Q为12,K为13。上面的5张牌就可以变成“1,2,3,4,5”(大小王分别看作2和4),“So Lucky!”。LL决定去买体育彩票啦。 现在,要求你使用这幅牌模拟上面的过程,然后告诉我们LL的运气如何, 如果牌能组成顺子就输出true,否则就输出false。为了方便起见,你可以认为大小王是0。
     
    import java.util.Arrays;
    public class Solution {
        //solution one
        public boolean isContinuous1(int [] numbers) {
            if(numbers.length <= 0)
                return false;
            
            Arrays.sort(numbers);
            
            int numberOfZero = 0;
            int numberOfGap = 0;
            for(int i = 0; i < numbers.length && numbers[i] == 0; i++){
                ++numberOfZero;
            }
            
            int small = numberOfZero, big = small + 1;
            while(big < numbers.length){
                if(numbers[small] == numbers[big])
                    return false;
                numberOfGap += numbers[big] - numbers[small] - 1;
                small = big;
                ++big;
            }
            return (numberOfGap > numberOfZero)? false : true;
        }
        //solution two
        /**
            max 记录 最大值
            min 记录  最小值
            min ,max 都不记0
            满足条件  1 max - min <5
                    2 除0外没有重复的数字(牌)
                    3 数组长度 为5
        */
        public boolean isContinuous(int [] numbers) {
            if(numbers.length <= 0)
                return false;
        int[]d = new int[14]; 
        d[0] = -5; 
        int len = numbers.length; 
        int max = -1; 
        int min = 14; 
        for(int i = 0; i < len; i++){
             d[numbers[i]]++; 
             if(numbers[i] == 0){
                 continue; 
             }
             if(d[numbers[i]] > 1){
                 return false; 
             }
             if(numbers[i] > max){
                 max = numbers[i]; 
             } if(numbers[i] < min){
                 min = numbers[i]; 
             }
          
        }
        if(max - min < 5){
             return true; 
        }
             return false;
        }
    }
     
    阅读全文>>

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

2018-08-24

1002. 写出这个数 (20)-浙大PAT乙级真题java实现

    1002. 写出这个数 (20)
    读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字。
    输入格式:每个测试输入包含1个测试用例,即给出自然数n的值。这里保证n小于10^100。
    输出格式:
    在一行内输出n的各位数字之和的每一位,拼音数字间有1 空格,但一行中最后一个拼音数字后没有空格。
    输入样例
    1234567890987654321123456789
    输出样例
    yi san wu

     

     

     
     
    阅读全文>>

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

2018-01-04

1016. 部分A+B (15)-PAT乙级真题-浙大PAT乙级真题java实现

    1016. 部分A+B (15) 
    正整数A的“DA(为1位整数)部分”定义为由A中所有DA组成的新整数PA。例如:给定A = 3862767,DA = 6,则A的“6部分”PA是66,因为A中有2个6。 
    现给定A、DA、B、DB,请编写程序计算PA + PB。 
    输入格式: 
    输入在一行中依次给出A、DA、B、DB,中间以空格分隔,其中0 < A, B < 10^10。 
    输出格式: 
    在一行中输出PA + PB的值。 
    输入样例1: 
    3862767 6 13530293 3 
    输出样例1: 
    399 
    输入样例2: 
    3862767 1 13530293 8 
    输出样例2: 
    0


    阅读全文>>

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

2018-01-11

64.滑动窗口的最大值

    64.滑动窗口的最大值

    题目描述

    给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}; 针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: {[2,3,4],2,6,2,5,1}, {2,[3,4,2],6,2,5,1}, {2,3,[4,2,6],2,5,1}, {2,3,4,[2,6,2],5,1}, {2,3,4,2,[6,2,5],1}, {2,3,4,2,6,[2,5,1]}。

    import java.util.ArrayList;
    import java.util.ArrayDeque;
    public class Solution {
        /**
        用一个双端队列,队列第一个位置保存当前窗口的最大值,当窗口滑动一次
        1.判断当前最大值是否过期
        2.新增加的值从队尾开始比较,把所有比他小的值丢掉
        */
        public ArrayList<Integer> maxInWindows(int [] num, int size)
        {
            ArrayList<Integer> res = new ArrayList<>();
            if(size == 0) return res;
            int begin; 
            ArrayDeque<Integer> q = new ArrayDeque<>();
            for(int i = 0; i < num.length; i++){
                begin = i - size + 1;
                if(q.isEmpty())
                    q.add(i);
                else if(begin > q.peekFirst())
                    q.pollFirst();
             
                while((!q.isEmpty()) && num[q.peekLast()] <= num[i])
                    q.pollLast();
                q.add(i);  
                if(begin >= 0)
                    res.add(num[q.peekFirst()]);
            }
            return res;
        }
    }
    阅读全文>>

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

2018-08-25

1022. D进制的A+B (20)-浙大PAT乙级真题java实现

    1022. D进制的A+B (20) 
    输入两个非负10进制整数A和B(<=2^30-1),输出A+B的D (1 < D <= 10)进制数。 
    输入格式: 
    输入在一行中依次给出3个整数A、B和D。 
    输出格式: 
    输出A+B的D进制数。 
    输入样例: 
    123 456 8 
    输出样例: 
    1103


    阅读全文>>

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

2018-01-17

1053.住房空置率 (20)-PAT乙级真题java实现

    1053.住房空置率 (20)-PAT乙级真题java实现

    在不打扰居民的前提下,统计住房空置率的一种方法是根据每户用电量的连续变化规律进行判断。判断方法如下: 
    在观察期内,若存在超过一半的日子用电量低于某给定的阈值e,则该住房为“可能空置”; 
    若观察期超过某给定阈值D天,且满足上一个条件,则该住房为“空置”。 
    现给定某居民区的住户用电量数据,请你统计“可能空置”的比率和“空置”比率,即以上两种状态的住房占居民区住房总套数的百分比。 
    输入格式: 
    输入第一行给出正整数N(<=1000),为居民区住房总套数;正实数e,即低电量阈值;正整数D,即观察期阈值。随后N行,每行按以下格式给出一套住房的用电量数据: 
    K E1 E2 … EK 
    其中K为观察的天数,Ei为第i天的用电量。 
    输出格式: 
    在一行中输出“可能空置”的比率和“空置”比率的百分比值,其间以一个空格分隔,保留小数点后1位。 
    输入样例: 
    5 0.5 10 
    6 0.3 0.4 0.5 0.2 0.8 0.6 
    10 0.0 0.1 0.2 0.3 0.0 0.8 0.6 0.7 0.0 0.5 
    5 0.4 0.3 0.5 0.1 0.7 
    11 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 
    11 2 2 2 1 1 0.1 1 0.1 0.1 0.1 0.1 
    输出样例: 
    40.0% 20.0% 
    (样例解释:第2、3户为“可能空置”,第4户为“空置”,其他户不是空置。)

     
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    public class Main {
        public static void main(String[] args) throws IOException {
            BufferedReader sc = new BufferedReader(new InputStreamReader(System.in));
            String[] temp = sc.readLine().trim().split(" ");
            int N = Integer.parseInt(temp[0]);
            double e = Double.parseDouble(temp[1]);
            int D = Integer.parseInt(temp[2]);
            int possibleBlank = 0, blank = 0;
            for(int i = 0; i < N; i++) {
                String[] d = sc.readLine().trim().split(" ");
                int pb = 0;
                if(Integer.parseInt(d[0]) <= D) {
                    for(int j = 1; j < d.length; j++) {
                        if(Double.parseDouble(d[j]) < e)
                            pb++;
                    }
                    if(pb > Integer.parseInt(d[0]) / 2)
                        possibleBlank++;
                }else {
                    for(int j = 1; j < d.length; j++) {
                        if(Double.parseDouble(d[j]) < e)
                            pb++;
                    }
                    if(pb > Integer.parseInt(d[0]) / 2)
                        blank++;
                }            
            }
            sc.close();
            System.out.printf("%.1f%% %.1f%%", possibleBlank * 100.0 / N, blank * 100.0 / N);
        }
    }
    阅读全文>>

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

2018-09-07

1032. 挖掘机技术哪家强(20)-浙大PAT乙级真题java实现

    1032. 挖掘机技术哪家强(20) 
    为了用事实说明挖掘机技术到底哪家强,PAT组织了一场挖掘机技能大赛。现请你根据比赛结果统计出技术最强的那个学校。 
    输入格式: 
    输入在第1行给出不超过10^5的正整数N,即参赛人数。随后N行,每行给出一位参赛者的信息和成绩,包括其所代表的学校的编号(从1开始连续编号)、及其比赛成绩(百分制),中间以空格分隔。 
    输出格式: 
    在一行中给出总得分最高的学校的编号、及其总分,中间以空格分隔。题目保证答案唯一,没有并列。 
    输入样例: 

    3 65 
    2 80 
    1 100 
    2 70 
    3 40 
    3 0 
    输出样例: 
    2 150


    阅读全文>>

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

2018-01-19

1033. 旧键盘打字(20)-浙大PAT乙级真题java实现

    1033. 旧键盘打字(20) 
    旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现。现在给出应该输入的一段文字、以及坏掉的那些键,打出的结果文字会是怎样? 
    输入格式: 
    输入在2行中分别给出坏掉的那些键、以及应该输入的文字。其中对应英文字母的坏键以大写给出;每段文字是不超过105个字符的串。可用的字符包括字母[a-z, A-Z]、数字0-9、以及下划线“_”(代表空格)、“,”、“.”、“-”、“+”(代表上档键)。题目保证第2行输入的文字串非空。 
    注意:如果上档键坏掉了,那么大写的英文字母无法被打出。 
    输出格式: 
    在一行中输出能够被打出的结果文字。如果没有一个字符能被打出,则输出空行。 
    输入样例: 
    7+IE. 
    7_This_is_a_test. 
    输出样例: 
    _hs_s_a_tst


    阅读全文>>

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

2018-01-19