序言
2015 编程之美挑战赛·初赛结束了,小伙伴们似乎都在Hihocoder上愉快的玩耍……
只有我一个人默默地打着Code Hunt……
啊对了,默默的全题3SP的AK了哟……
来逐题写下题解和解题源码吧…… (P.S 有什么不好的或者说得不对的地方请告诉我哦,我会立马改正的~(●'◡'●))
《Update Apr.27th Result》
完整代码及博文中使用无水印图片可以在这里下载(0积分):http://download.csdn.net/detail/okcd00/8634751
Section 00 BAIYUN
00.01 Tutorial 教程
点进去会有一个小动画,亲切的告诉你玩法,
新手们可以看看这个哦~~
00.02 求最值
//00.02
using System;
public class Program {
public static int Puzzle(int a, int b) {
return Math.Max(a,b);
}
}
00.03 找规律
给了两个数对,仔细观察得知(好吧其实我做过所以有经验了)答案是<a1b2+a2b1, a2b2>
//00.03
using System;
public class Program {
// Each array contains two elements
public static int[] Puzzle(int[] a, int[] b) {
int[] t=new int[2];
t[0]=a[0]*b[1]+a[1]*b[0];
t[1]=a[1]*b[1];
return t;
}
}
00.04 进制转换(十进制转二进制)
//00.04
using System;
public class Program {
public static string Puzzle(int n) {
string j = Convert.ToString(n, 2);
return j;
}
}
00.05 元素前移
这题是把字符串用空格分隔开,每一个部分作为一个元素,循环左移n位(当然等效于n%元素个数 位),得到的新字符串。
其中,分隔通过Split函数实现,循环左移可以通过 newArr[i]=oldArr[(i+n)/len]来实现
最终把string数组连起来的时候中间还需要加空格,这时需要用到的就是Join(a,b)函数,将数组b中的数连起来,两两之间用a分隔。
//00.05
using System;
public class Program {
public static string Puzzle(string s, int n)
{
string[] sArr=new string[100];
sArr=s.Split(' ');
int len=sArr.Length;
string[] ss=new string[len];
for(int i=0;i<len;i++) ss[i]=sArr[(n+i)%len];
return String.Join(" ",ss);
}
}
Section 01 BAOBAO
01.01 判断元素是否完全相同
为了判断元素是否完全一致,我用了Linq里的集合操作,简单的说,找 (a集合的非交集部分)与(b集合的非交集部分)的并集,如果这个集合没有东西,那就是完全相等咯~
//01.01
using System;
using System.Linq;
public class Program {
public static bool Puzzle(int[] a, int[] b)
{
int[] result=a.Except(b).Concat(b.Except(a)).ToArray();
return result.Length==0;
}
}
01.02 ISBN校验
#include <iostream>
#include <cstring>
#include <string>
using namespace std;
int n[13]={0};
int main()
{
string s;
while(cin>>s && s.length())
{
int pos=0,ans=0;
for(int i=0;i<s.length();i++)
{
if(s[i]!='-')
n[pos++]=s[i]-'0';
}
for(int i=0;i<12;i++)
{
ans+=n[i]*(i%2?3:1);
}
ans%=10;
ans=10-ans;
cout<<ans<<endl;
}
return 0;
}
//01.02
using System;
public class Program
{
public static bool Puzzle(string s)
{
int ans=0;
int pl=0;
char a='0';
s=s.Replace("-","");
for(int i=0;i<s.Length-1;i++)
{
if(i%2==0) pl=1;
else pl=3;
ans+=((int)s[i]-(int)a)*pl;
}
ans%=10; if(ans!=0) ans=10-ans;
return ans==(int)s[s.Length-1]-(int)a;
}
}
01.03 进制转换(十进制转四进制)
当发现所有的数字都在0-3之间徘徊的时候大约就能感觉到是四进制数了,进制转换的实现并不困难:
//01.03
using System;
public class Program {
public static string Puzzle(int n)
{
string s="";
while(true)
{
int r=n/4,m=n%4;
s=m.ToString()+s;
n=r;
if(n==0)break;
}
return s;
}
}
01.04 集合求交集
这里也用到了Linq中的函数,求集合交集,这里需要注意的地方在于直接求交集并不能返回int[]类型,我们需要再加上ToArray()//01.04
using System;
using System.Linq;
public class Program {
public static int[] Puzzle(int[] a, int[] b)
{
return a.Intersect(b).ToArray();
}
}
至此,解题报告及完整代码说明完毕,若有不明白的或者我有哪里说得不对的,亦或是你有什么更好的算法,请务必在下面评论告诉我o(^▽^)o ~~
我们大家一起努力,一起进步吧~
By okcd00(糖果天王)
题目截图
大家可能想看看题目的数据或者检查下是不是真的3SP之类的,每道题的3SP截图如下所示:
Section 00
Section 01
可怕的01.02测试数据