bilibili 2020 校招面试题程序题

[编程题]复数乘法

题目描述:
输入两个表示复数的字符串,输出它们相乘的结果的字符串
复数字符串用a+bi表示(a, b 为整数, i为虚数单位,i² =1)

输入描述:
两个表示复数的字符串

输出描述:
两个数相乘的结果的字符串

输入例子:
1+2i
2+1i

输出例子:
0+5i

解题思路:
先将输入的两个复数进行拆分,并提取出实部和虚部,随后进行运算即可

import java.util.Scanner;

public class complexNumber {
    public static int stringtoInt(String s){
        int num = 0;
        int flag = 1;
        for (int i = 0; i < s.length(); i++){
            if (s.charAt(i) == '-')
                flag = -1;
            else if (s.charAt(i) >= '0' && s.charAt(i) <= '9')
                num = num * 10 + (s.charAt(i) - '0');
        }
        return num * flag;
    }
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        String s1= sc.nextLine();
        String s2 = sc.nextLine();
        int a1 =stringtoInt(s1.substring(0,s1.indexOf('+'))) ;
        int a2 =stringtoInt(s1.substring(s1.indexOf('+')+1)) ;

        int b1 = stringtoInt(s2.substring(0,s2.indexOf('+')));
        int b2 = stringtoInt(s2.substring(s2.indexOf('+')+1));

        int f= a1*b1-a2*b2;
        int s= a1*b2+a2*b1;
        System.out.println(f + "+" + s + "i");
    }
}

[编程题]一年中的第几天

题目描述:
输入一个"YYYY-MM-dd"格式的日期字符串,输出该天是当年的第几天(1 月 1 日是每年的第 1 天)

输入描述:
一个"YYYY-MM-dd"格式的表示日期的字符串

输出描述:
该天是当年的第几天

输入例子:
2019-01-09

输出例子:
9

解题思路:
首先将字符串进行拆分,先根据年份确定平年还是闰年,随后进行根据月份算出已经过去的天数,再加上几号即可

import java.util.Scanner;
public class days {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String date = sc.nextLine();
        String[] d = date.split(String.valueOf('-'));
        int year = Integer.parseInt(d[0]);
        int month = Integer.parseInt(d[1]);
        int day = Integer.parseInt(d[2]);
        int count = 0;

        int[] pingDays = new int[]{0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365};
        int[] runDays = new int[]{0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366};

         if (((year % 4 == 0 )&&(year % 100 != 0))||(year % 400 ==0)){
            count = runDays[month - 1]+day;
        }else {
            count = pingDays[month - 1] + day;
        }
        System.out.println(count);
    }
}

[编程题]k个一组翻转链表

题目描述:
给你一个链表,每 k 个节点一组进行翻转,请返回翻转后的链表。
如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。

示例 :
给定这个链表:1->2->3->4->5
当 k = 2 时,应当返回: 2->1->4->3->5
当 k = 3 时,应当返回: 3->2->1->4->5

输入描述:
第一行:依次输入链表中的各个元素,以"#"结束

第二行:每组数量k

输出描述:
处理后的链表中的各个元素,以"->"连接

输入例子:
1 2 3 4 5 #
2

输出例子:
2->1->4->3->5

解题思路:
首先将输入的字符串变成只有内容的数组,然后循环调用编写的翻转函数对数组进行翻转,如果长度不足则取消翻转

import java.util.Scanner;

public class reverse {
    public static void reveral(String[] arr,int start,int end){
        while (start<end) {
            String tmp = arr[start];
            arr[start] = arr[end];
            arr[end] = tmp;
            start++;
            end--;
        }
    }
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String arr = sc.nextLine();
        String arrs = arr.substring(0,arr.length()-1);
        String[] list = arrs.split(" ");

        int size = sc.nextInt();
        int start = 0;
        while (start + size - 1 < list.length){
            reveral(list,start,start+size-1);
            start = start +size;
        }
        for (int i = 0;i<list.length-1;i++){
            System.out.print(list[i]+"->");
        }
        System.out.println(list[list.length-1]);

    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值