前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >“365算法每日学计划”:java语言基础题目及解答(06-10打卡)

“365算法每日学计划”:java语言基础题目及解答(06-10打卡)

作者头像
好好学java
发布2018-08-01 16:48:50
4850
发布2018-08-01 16:48:50
举报
文章被收录于专栏:好好学java的技术栈

自从开始做公众号开始,就一直在思考,怎么把算法的训练做好,因为思海同学在算法这方面的掌握确实还不够。因此,我现在想做一个“365算法每日学计划”。

“计划”的主要目的

1、想通过这样的方式监督自己更努力的学习算法。

2、想和小伙伴们“组团”一起来学习交流学习算法过程中的点点滴滴。

“计划”的主要内容

1、数据结构和算法的基础知识巩固。

2、逐步进阶的oj算法训练。

“计划”的时间安排:每周三和周六

——说在前面

发表于2018-07-14思海同学

"算法每日学计划"06打卡: 问题描述   给定一个长度为n的数列,将这个数列按从小到大的顺序排列。1<=n<=200 输入格式   第一行为一个整数n。   第二行包含n个整数,为待排序的数,每个整数的绝对值小于10000。 输出格式   输出一行,按从小到大的顺序输出排序后的数列。 样例输入 5 8 3 6 4 9 样例输出 3 4 6 8 9 注:题目简单,解法不少于10种,踊跃发言。

发表于2018-07-14思海同学

“算法每日学计划”07打卡: 问题描述   求出区间[a,b]中所有整数的质因数分解。 输入格式   输入两个整数a,b。 输出格式   每行输出一个数的分解,形如k=a1a2a3…(a1<=a2<=a3…,k也是从小到大的)(具体可看样例) 样例输入 3 10 样例输出 3=3 4=22 5=5 6=23 7=7 8=222 9=33 10=25 提示   先筛出所有素数,然后再分解。 数据规模和约定 2<=a<=b<=10000

代码语言:javascript
复制
import java.util.Scanner;

public class Main {

    /**
     * (1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
     * (2)如果n>k,但n能被k整除,则应打印出k的值,并用n除以k的商作为新的正整数n,重复执行第一步。
     * (3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
     * 
     * @param joy
     */
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        Integer a = sc.nextInt();
        Integer b = sc.nextInt();
        for (int i = a; i <= b; i++) {
            // 输入值大于等于3
            if (i >= 3) {
                String m = "";
                int k = 2;
                int j = i;
                while (j != k) {
                    // 如果n>k,但n能被k整除,则应打印出k的值,并用n除以k的商作为新的正整数n
                    if (j % k == 0) {
                        m = m + k + "*";
                        j = j / k;
                    }
                    // 如果n不能被k整除,则用k+1作为k的值
                    else if (j % k != 0) {
                        k++;
                    }
                }
                m = m + k;
                System.out.println(i + "=" + m);
            } else {
                System.out.println(i + "=" + i);
            }
        }
    }
}

365算法每日学计划

发表于2018-07-14思海同学

“算法每日学计划”08打卡: 问题描述   给定两个仅由大写字母或小写字母组成的字符串(长度介于1到10之间),它们之间的关 系是以下4中情况之一:   1:两个字符串长度不等。比如 Beijing 和 Hebei   2:两个字符串不仅长度相等,而且相应位置上的字符完全一致(区分大小写),比如 Beijing 和 Beijing   3:两个字符串长度相等,相应位置上的字符仅在不区分大小写的前提下才能达到完 全一致(也就是说,它并不满足情况2)。比如 beijing 和 BEIjing   4:两个字符串长度相等,但是即使是不区分大小写也不能使这两个字符串一致。比 如 Beijing 和 Nanjing   编程判断输入的两个字符串之间的关系属于这四类中的哪一类,给出所属的类的编号 。 输入格式   包括两行,每行都是一个字符串 输出格式   仅有一个数字,表明这两个字符串的关系编号 样例输入 BEIjing beiJing 样例输出 3 注意:简单题目

代码语言:javascript
复制
public class Main {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
    Scanner input=new Scanner(System.in);
    String str1=input.nextLine();
    String str2=input.nextLine();
    if(str1.length()!=str2.length()){System.out.println(1);}
    else{
    if(str1.equals(str2)){System.out.println(2);}
    if(str1.toLowerCase().equals(str2.toLowerCase())){System.out.println(3);}
    else{System.out.println(4);}
    }
    }

}

365算法每日学计划

发表于2018-07-14思海同学

“算法每日学计划”09打卡: 问题描述   给定一个N阶矩阵A,输出A的M次幂(M是非负整数)   例如:   A =   1 2   3 4   A的2次幂   7 10   15 22 输入格式   第一行是一个正整数N、M(1<=N<=30, 0<=M<=5),表示矩阵A的阶数和要求的幂数   接下来N行,每行N个绝对值不超过10的非负整数,描述矩阵A的值 输出格式   输出共N行,每行N个整数,表示A的M次幂所对应的矩阵。相邻的数之间用一个空格 隔开 样例输入 2 2 1 2 3 4 样例输出 7 10 15 22

代码语言:javascript
复制
public class Main {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int m = scanner.nextInt();
        Integer[][] a = new Integer[n][n];
        Integer[][] result = new Integer[n][n];  //保存结果
        for(int i=0;i < n;i ++){
            for(int j=0;j < n;j ++)
                a[i][j] = scanner.nextInt();
        }
        result = a;
        for(int i = 1;i < m;i++)
            result = multiplyMaritx(result, a);

        printMaritx(result);
    }

    /**
     * 打印二维数组
     * @param a
     */
    public static void printMaritx(Integer[][] a){
        for(int i = 0;i < a.length;i ++){
            for(int j = 0;j < a[i].length;j ++)
                System.out.print(a[i][j] + " ");
            System.out.println();
        }
    }

    /**
     * 两个同阶矩阵相乘,返回结果。
     * @param a 第一个矩阵
     * @param b 第二个矩阵
     * @return 相乘的结果
     */
    public static Integer[][] multiplyMaritx(Integer[][] a,Integer[][] b){
        int n = a.length;
        Integer[][] result = new Integer[n][n];  //保存结果
        for(int i = 0;i < n;i ++){
            //遍历二位数组a的行
            for(int j = 0;j < n;j++){
                //遍历二位数组b的列
                Integer c = new Integer(0);
                for(int k = 0;k < n;k ++)
                     //第i行j列的值为a的第i行上的n个数和b的第j列上的n个数对应相乘之和,
                    //其中n为a的列数,也是b的行数,a的列数和b的行数相等
                    c += a[i][k] * b[k][j];
                result[i][j] = c;
            }
        }

        return result;
    }

}

365算法每日学计划

发表于2018-07-14思海同学

“算法每日学计划”10打卡: 问题描述 亚洲微软研究院所在的希格玛大厦一共有6部电梯。在高峰时间,每层都有人上下,电梯在每层都停。实习生小飞常常会被每层都停的电梯弄得很不耐烦,于是他提出了这样一个办法: 由于楼层并不算太高,那么在繁忙的上下班时间,每次电梯从一层往上走时,我们只允许电梯停在其中的某一层。所有乘客从一楼上电梯,到达某层后,电梯停下来,所有乘客再从这里爬楼梯到自己的目的层。在一楼的时候,每个乘客选择自己的目的层,电梯则自动计算出应停的楼层。 问:电梯停在哪一层楼,能够保证这次乘坐电梯的所有乘客爬楼梯的层数之和最少。 问题分析 该问题本质上是一个优化问题。   首先为这个问题找到一个合适的抽象模型。 有两个因素会影响结果:乘客的数目和乘客的目的楼层。

思路:假设电梯现在停在第i层,i层以下的人有N1个,i层有N2个,i层以上的人有N3个,当前需要走的楼梯数为Y。当电梯再往上走一层时,i层及i层以下的人一共需要多走N1+N2步,而i层以上的人则一共少走了N3步,所以当N1+N2时,电梯应该继续往上走。

Java代码:

代码语言:javascript
复制
public class Main {
    public static int stopLift(int[] to) {
        if (to.length < 2) {
            return -1;
        }
        int n1 = 0, n2 = to[1], n3= 0, y = 0;
        // 计算一层及以上的人数
        for (int i = 1; i < to.length; i++) {
            n3 += to[i];
            y += (i - 1) * to[i];
        }

        for(int i = 1; i < to.length; i++) {
            n2 = to[i];
            n1 += to[i - 1];
            n3 = n3 - n2;
            if (n1 + n2 >= n3) {
                return i;
            }
        }
        return -1;
    }


    public static void main(String[] args) {

        int[] to = {0, 1, 2 ,3 ,5 ,6, 7};
        System.out.format("电梯应该停在第%d层。", stopLift(to));

    }
}

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-07-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 好好学java 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档