5.10号快手笔试题思路

第一题:数字转换为中文表示法(AC)

思路:注意输入是0的情况,否则通过率87.5在等着你。。

import java.util.Scanner;

public class kuaishou {

    public void convert(int number) {
        if (number == 0) {// 注意边界条件
            System.out.println("L");
            return;
        }
        String[] num = { "L", "1", "2", "3", "4", "5", "6", "7", "8", "9" };
        String[] unit = { "", "S", "B", "Q", "W" };
        String result = String.valueOf(number);
        char[] ch = result.toCharArray();
        StringBuilder str = new StringBuilder();// 使用StringBuilder来操作字符串频繁更新的情况
        for (int i = 0; i < ch.length; i++) {
            int c = (int) ch[i] - 48;// 从第一位依次判断
            if (c != 0)
                str.append(num[c] + unit[ch.length - i - 1]);
            else {// 如果当前位是0的话
                if (i == ch.length - 1) {
                } // 如果是最后一位,则不需要操作
                else {
                    if (ch[i + 1] != '0')// 否则,判断下一位是否为0,如果不为0,则追加“L”
                        str.append(num[0]);
                }
            }
        }
        System.out.println(str.toString());
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String str = scanner.next();
        if ("-1".equals(str))
            return;
        new kuaishou().convert(Integer.parseInt(str));
    }
}

第二题:ACM-ICPC world final问题(AC)

思路:

博弈?找规律。。。看能不能被3整除,就这样ac了。。。

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);  
        int m = sc.nextInt();
        for(int i = 0; i < m; i++){
            int n = sc.nextInt();
            if(n % 3 == 0)
                System.out.println("don't be discouraged");
            else
                System.out.println("lucky");
        }
    }
}

第三题:有思路,但没写出来。。。求大神思路代码

#春招##笔试题目#
全部评论
作者:gzcoder 链接:https://www.nowcoder.com/discuss/80542 来源:牛客网 快手第三题... 实际考你怎么去维持盒子的边长为 2^k... 其实是取max(2^ki *2^gi )  ,本来可以2^ki * ceil(sqrt(ai))因为所有盒子的长度都得是2^k ,所以我们要找大于ceil(sqrt(ai))并且离它最近的2的幂(2^gi),   实际要输出的就是max(gi+ai) 额..另外补充一点 每个盒子V都可以放多个盒子vi,只要放的盒子总体积sum{vi}不大于V即可。 条件三只是告诉你阿.. 2^k+2^k = 2^(k+1).. ....所以说快手面试是水题大作战?
点赞 回复 分享
发布于 2018-05-12 00:37
求问第二题,怎么想的?
点赞 回复 分享
发布于 2018-05-11 15:12
我第三题的思路是这样,大家看下对不对。。。根据每个块的大小排序,然后合并块一样大的个数,再从最小到最大依次将数量/4得到下一个大小的数量 直到等于i+1的情况【最小为1】 【手脑笨没调出来,不知道思路对不对}QwQ
点赞 回复 分享
发布于 2018-05-11 11:34
贴一下第一题,轻喷 public static void main(String[] args) {          Scanner in = new Scanner(System.in);          String s="";          int a = in.nextInt();          int b = a/10000;          if(b>=1) {              String b1=Integer.toString(b);              s=b1+'W';          }          int c=(a/1000)%10;          if(c>=1) {              String c1=Integer.toString(c);              s=s+c1+'Q';          }          int d=(a/100)%10;          if(d>=1) {              String d1=Integer.toString(d);              s=s+d1+'B';          }          int e=(a/10)%10;          if(e>=1) {              String e1=Integer.toString(e);              s=s+e1+'S';          }          int f=a%10;          if(f>=1) {              String f1=Integer.toString(f);              s=s+f;          }          System.out.println(s); }
点赞 回复 分享
发布于 2018-05-11 00:36
我以为输入0,输出0,我考虑了0,还是87.5%,我就一直想不通。。。
点赞 回复 分享
发布于 2018-05-10 21:48
和楼主一样 但没有AC 没找到原因 不知道是不是因为输入石头个数范围限制我没有考虑 #include <iostream> using namespace std; int main() {     int n;     cin >> n;     for(int i=0; i<n; i++)     {         int a;         cin >> a;         if(a%3 != 0)             cout << "lucky" << endl;         else             cout << "don`t be discouraged" << endl;     }     return 0; }
点赞 回复 分享
发布于 2018-05-10 21:39
第三题我也没做,感觉好像挺麻烦 第二题楼主的做法好简单....我还想象成一次只能取1个或2个才做出来的
点赞 回复 分享
发布于 2018-05-10 21:36
第二题真的**
点赞 回复 分享
发布于 2018-05-10 21:21
题目不太一样,第一题我没有,第二题我dfs+打表过了,你的第三题是那个求第n项第数字是啥的题目吗?
点赞 回复 分享
发布于 2018-05-10 21:19

相关推荐

评论
点赞
12
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务