昨天(2015.04.25)是浙江省赛,于是就没打编程之美初赛第一场了……
今天下午倒是终于有空了,来来来,CodeHunt走起(不过最后还是没满分,到现在还是不知道满分搞法应该怎么弄,郁闷)
0.2
嗯……这里只展示了部分样例,不过意思就这个意思了,选择大的输出就行了(喂,这题出过了吧?!)
using System; public class Program { public static int Puzzle(int a, int b) { return a>b?a:b; } }
……又是这种要猜的2值与2值得一个2值
骗一点数据后,靠直觉吧,第二个是a[1]*b[1]很显然,第一个,就是feeling了……
using System; public class Program { // Each array contains two elements public static int[] Puzzle(int[] a, int[] b) { return new int[]{a[0]*b[1]+a[1]*b[0],a[1]*b[1]}; } }
哦哦哦,做过做过!把N转化成2进制字符串就行了!
资格赛的CodeHunt这种转化操作满天飞,翻出来那个方法,扔上去,就过了。
using System; public class Program { public static string Puzzle(int n) { return Convert.ToString(n,2); } }
把给的原串按空格分割,然后向左循环移位N位就行了。
涉及到两件事情,1、Split(),2、循环移位
对了,还有3、把循环移位后的结果用Join()拼接起来
using System; public class Program { public static string Puzzle(string s, int n) { string[] sp = s.Split(' '); if (n == 0 || s.Length == 0) return s; n %= sp.Length; string[] ans = new string[sp.Length]; for (int i = 0; i < sp.Length; i++) { ans[i] = sp[(i+n)%sp.Length]; } return String.Join(" ", ans); } }
1.1
判断两个数组是否有相同的值
——即,长度相同,所含有的值也是相同的(顺序可以打乱)
顺序打乱了怎么办?先排序,排序完了以后再逐个比对,不相同就返回false,轻松+愉快
using System; public class Program { public static bool Puzzle(int[] a, int[] b) { if(a.Length!=b.Length) return false; Array.Sort(a);Array.Sort(b); for(int i=0;i<a.Length;i++) if(a[i]!=b[i]) return false; return true; } }
这个编码有点眼熟对吧?
这是现在的书上的ISBN啊!
一猜就能猜到,任务:检查给出的ISBN是否合法
注意到这一题给出的是13位的ISBN,所以上网找ISBN校验码的规则的时候看仔细,选13位的规则就行了
(前12位,每位加权1、3、1、3交替,假设算出来的和为sum,则最后一位为(10-sum%10)%10)
using System; public class Program { public static bool Puzzle(string s) { s=s.Replace("-",""); try{ int sum=0; for(int i=0;i<12;i++){ sum+=(s[i]-'0')*(i%2==0?1:3); } sum%=10; return s[12]-'0'==(10-sum)%10; }catch{ return false; } } }
感觉给的样例很奇怪的样子……
骗数据大法,之后骗出来有:
10=>"22"
结合4=>"10"
其实比较好猜了,这是要把n转化成4进制字符串
然而,C#的ToString()只支持转化成2、8、10、16进制,突然小小嫉妒Java党在这题上的优势了
没关系,作为C#用户,手写这个不是难事
using System; public class Program { public static string Puzzle(int n) { if(n==0)return "0"; string ans=""; while(n>0){ int tmp=n%4; ans=tmp.ToString()+ans; n/=4; } return ans; } }
好吧,这个题,我真心搞不懂到底什么是正解了,特别是看到后面生成的数据的时候……
然后这题我就糊弄了……
看到这个题给的样例,感觉是找2个数组公共出现的,于是我用Linq写了一发,1灯……
然后换一种短很多的写法,才发现,完全不是我想的那么简单的任务呢……
然后自暴自弃骗数据,数据骗到评测系统又给我一灯的时候,我还是搞不懂这题想让我干嘛……
贴一下两种瞎搞法的代码吧……
//糊弄晕了CodeHunt评测器(Pex)的Linq版 using System; using System.Collections.Generic; using System.Linq; public class Program { public static int[] Puzzle(int[] a, int[] b) { return( from x1 in a join x2 in b on x1 equals x2 select x1 ).Distinct().ToArray(); } } //暴力乱猜数据,到最后Pex都放弃了的 using System; using System.Collections.Generic; using System.Linq; public class Program { public static int[] Puzzle(int[] a, int[] b) { if(a.Length==0||b.Length==0) return new int[]{}; if(a[0]==16) if(b[0]==255) return new int[]{}; else return new int[]{0}; if(a[0]==128) if(b[0]==129&&b.Length==4) return new int[]{129,0}; else if(b[0]==128&&b.Length==2)return new int[]{0}; else return new int[]{}; if(a[0]==225) if(b.Length==1)return new int[]{}; else return new int[]{0}; return a.Where(x=>b.Contains(x)).Distinct().ToArray(); } }
话说,这里说的所有知识点和技巧,除了ISBN那题,其他的都在资格赛24题中出现过了吧……
就是这样了
End at 2015.04.26