这两天刚报名参加了微软的编程之美挑战赛,试了下Code Hunt,相比普通的CodeHunt zone来说还是非常有难度的。
地址:https://www.codehunt.com/

00

00.01

return -9 + x*11;

00.02

return x^y;

00.03

int i=0,j=0,res=0;;
for(i=0;i<p.length;i++)
{ res+= p[i][0] * (int)Math.pow(x,p[i][1]); }
return res;

00.04卡住了很久,后来穷举看了很多的测试用例,最后找出来的,Orz

return Math.abs(x)>=Math.abs(y);

00.05 逗逼题

      return a[a.length -2];

00.06

        String res = "";
        for(int i= s.length()-1;i>=0;i--)
            res += s.charAt(i);
        return res+s;

01

01.01

    int[] res = new int[n];
    for(int i=0;i<n && i<a.length;i++)
        res[i] = a[i];
    return res;

01.02

        if(i==0)
            return '0';
        return i>0 ? '+' : '-';

01.03

      return !(a&b);

01.04 绝对值排序问题

        int i,temp,j;
        for (i = 1; i < a.length; i++) { temp = a[i]; for (j = i - 1; j >= 0 && Math.abs(a[j]) > Math.abs(temp); j--) a[j + 1] = a[j]; a[j+1] = temp; }
        return a;

01.05 字符串反转

      String res="";
      for(int i=s.length()-1;i>=0;i--)
        res += s.charAt(i);
    return res;

01.06 就这么简单,被带跑到素数判断以后推倒重来的结果

    return n%4==0 ? true : false;

02

02.01 大小写反转

        String res="";
        char tmp;
        for(int i=0;i<s.length();i++)
        {
            tmp = s.charAt(i);
            if(tmp>='A' && tmp <='Z')
                tmp = (char)((int)tmp+32);
            else if(tmp>='a' && tmp<='z')
                tmp = (char)((int)tmp-32);
            res +=tmp; 

        }
        return res;

02.02 字符串中字母个数总和

    int sum=0;
    for(int i=0;i<a.length;i++)
      sum+=a[i].length();
    return sum;

02.03

      int []res = new int[a.length-1];
      for(int i =0;i<res.length;i++)
        res[i]=a[i+1]-a[i];
      return res;

02.04 列方程解参数

    return (int)(x + Math.pow(x,2)*3)/2;

02.05 特殊情况,全为空格时

        String []ss = s.trim().split(" ");
        if(i>=ss.length)
          return null;
        else if(ss.length==1 && ss[0].equals(""))
          return null;
        return ss[i];

02.06 TF 找规律就好

    return !(x & !y) || z;

03

03.01 替换字符简化过程

        String res ="";
        s = s.replace("\t","#");
        int i,j,k;
        for(i=0;i<s.length();i++)
        {
            if(s.charAt(i)=='#')
            {
                k = (n-res.length()%n);
                for(j=0;j<k;j++)
                     res +=" ";
            }
            else 
                res+=s.charAt(i);
        }
      return res;

03.02 邮箱正确性判断,但是不可以用正则,下面的是勉强通过,性能不好的代码

        int aPos = s.indexOf("@", 1);
        if (aPos < 0 || aPos == s.length()-1) 
 return false;
        if (s.indexOf("@", aPos + 1) > 0)
 return false;
            int bPos = s.indexOf(".", aPos + 2);
        if (bPos < 0 || bPos == s.length()-1 || s.indexOf("..")==s.length()-1)
 return false;
 return true;

正则写法,在Eclipse下面好用,但是在Hunt平台上,全返回true,不知道为嘛。

        String regex="\\w+@[\\w\\.]+\\.[\\w\\.]+";
        return s.matches(regex);

03.03 斐波那契数组,可怜我自己,还用方程解

       return (n/3==0) ? n : Puzzle(n-1) + Puzzle(n-2);

03.04

          for(int i=0;i<a.length;i++)
            a[i] = a[i]/c;
        return a;

03.05 进制转换

      String res = "";
        if(n==0)
            return "0";
        while(n>0)
        {
              res = n%b + res;
              n = n/b;
        }
        return res;

03.06 没做出来,心塞