今日晚8点,在看着猎场正起劲的时候,我赶紧关掉网页,把我改做的事情做了,说好今天8点开始总结今日的学习。
一入猎场终迷狂,除了早上在高集中的学习外,下午1点开始看猎场一直看到4点才开始学习,然后晚上7点到8点又是一场猎场。8点钟到现在就是下面的写写写。我的思维是早点看完早点学习,看完了眼不见心不烦的才能静下心。唉!着实的是走火入魔。
Integer类
String | toString() 返回一个表示该 Integer 值的 String 对象。 |
static String | toString(int i) 返回一个表示指定整数的 String 对象。 |
static String | toString(int i, int radix) 返回用第二个参数指定基数表示的第一个参数的字符串表示形式。 |
static Integer | valueOf(int i) 返回一个表示指定的 int 值的 Integer 实例。 |
static Integer | valueOf(String s) 返回保存指定的 String 的值的 Integer 对象。 |
static Integer | valueOf(String s, int radix) 返回一个 Integer 对象,该对象中保存了用第二个参数提供的基数进行解析时从指定的 String 中提取的值。 |
static int | parseInt(String s) 将字符串参数作为有符号的十进制整数进行解析。 |
static int | parseInt(String s, int radix) 使用第二个参数指定的基数,将字符串参数解析为有符号的整数。 |
了解上面方法后下面的题就好AC了。
Acm题
2进制转化为3进制
描述
输入一个2进制的数,要求输出该2进制数的3进制表示。
在3进制的表示中,只有0,1,2三种符号
输入
第1行是测试数据的组数n,后面跟着n行输入。每组测试数据占1行,包括一个以0和1组成的字符串,字
符串长度至少是1,至多是64
输出
n行,每行输出对应一个输入。
样例输入
2
10110
1011
样例输出
211
102
题解:
在Java当中,不需要手动去写进制的转换,可以直接用到integer类的方法。我的思路是,我们接收的是2进制,需要转换成3进制。然而没有更好的方式去存取2进制,我用的是int类,用int接受的数字看着是2进制,其实它还是一个10进制。所有需要找个办法,把我输入的2进制转成便于读的10进制,需要用到的时候再把这个10进制转成相应需要进制即可。
以下是java代码的实现:
运行结果:
有多少位不同
描述
给定两个十进制正整数A和B,请计算出A和B用二进制表示时有多少位是不同的。
例如,“3”的二进制表示为“11”,“9”的二进制表示为“1001”,“11”不足4位,不足部分实际上为0,即“0011”,因此二者从右至左第2、4位不同,所以3和9用二进制表示时有两位不同。
输入
输入包括两行,第1行是一个整数n,表示有n组测试数据。紧接着n行,每行包括两个十进制正整数A和B,A、B之间用空格隔开。
输出
输出有n行,为每组测试数据中A和B用二进制表示时不相同的位数。
样例输入
1
3 9
样例输出
2
最开始写的代码:
我这个逻辑是对了的,但是后来不管怎么提交都不能通过。以后研究了其他人的代码,发现逻辑和我一样,我在回来debug了一下,发现了代码的问题,最后改正后,代码通过AC。
此题的二次代码:
此代码参考网上写的,然后去找了下位运算的资料,这题不算白做,至少让我知道了位运算,以及使用。
第三次的代码:
此代码基本克隆网上的了。重点研究了下我上图中注释的地方。
此题解法是:
用15和2举例。15的二进制是1111,2的二进制是0010,他们进行异或之后得到的二进制是1101,就是13.这样很明显就知道答案是3了。这个3要怎么让机器去找了而且速度快呢,那么就是会数学运算了。1101 – 1 =1100(ans-1),把减1得到数和自身进行与运算,与运算的性质是同真为真。如果是有1可以减,我们就记一次++。进过三次过后1101的与运算就为0了,而count也++了三次。代码中ans&=(ans-1)就是一个去1的过程,进行了异或运算后得到多少1就一次次的去掉1,去掉一个1就是一次不同。
今日做题才发现还有这样的位运算符,先了解了位运算才能解开上面的题。
与(&)、非(~)、或(|)、异或(^)
- 与运算符
与运算符用符号“&”表示,其使用规律如下:
两个操作数中位都为1,结果才为1,否则结果为0,用高中的与来记,同真为真。
例如下面的程序段。
运行结果
a 和b 与的结果是:128
下面分析这个程序:
“a”的值是129,转换成二进制就是10000001,而“b”的值是128,转换成二进制就是10000000。根据与运算符的运算规律,只有两个位都是1,结果才是1,可以知道结果就是10000000,即128。
或运算符
或运算符用符号“|”表示,其运算规律如下:
两个位只要有一个为1,那么结果就是1,否则就为0,下面看一个简单的例子。
运运行结果
8的二进制:1000
a 非的结果是:-9:-1001
2的二进制:10
b 非的结果是:-3:-11
- 下面分析这个程序段:
a 的值是129,转换成二进制就是10000001,而b 的值是128,转换成二进制就是10000000,根据或运算符的运算规律,只有两个位有一个是1,结果才是1,可以知道结果就是10000001,即129。
3.非运算符
非运算符用符号“~”表示,其运算规律如下:
如果位为0,结果是1,如果位为1,结果是0,下面看一个简单例子。
- 异或运算符
异或运算符是用符号“^”表示的,其运算规律是:
两个操作数的位中,相同则结果为0,不同则结果为1。下面看一个简单的例子。
运行结果
a 与 b 异或的结果是:13
分析上面的程序段:a 的值是15,转换成二进制为1111,而b 的值是2,转换成二进制为0010,根据异或的运算规律,可以得出其结果为1101 即13。
Acm题:
整数奇偶排序
描述
输入10个整数,彼此以空格分隔
重新排序以后输出(也按空格分隔),要求:
1.先输出其中的奇数,并按从大到小排列;
2.然后输出其中的偶数,并按从小到大排列。
输入
任意排序的10个整数(0~100),彼此以空格分隔
输出
按照要求排序后输出,由空格分隔
样例输入
4 7 3 13 11 12 0 47 34 98
样例输出
47 13 11 7 3 0 4 12 34 98
我的解题方法:
这就是一个数组排序问题,我好好研究就一个数组就能搞定,先把数组进行排序。奇数要从大到小输出,我就反着去判断并输出。偶数相反。此题就这样解。
但是信心满满的去提交,得到答案错误,不管怎么写就是无法通过提交,最后发现oj出题规律。我这道题的代码是错在没有持续输入上,我在网上找了一个C语言的代码,通过了,仔细研究了下发现的问题。
Java实现:
第一次写的代码修改后:
修改后能提交
第二次的代码:
Acm题:
兔子产子
描述
从前有一对长寿兔子,它们每一个月生一对兔子,新生的小兔子两个月就长大了,在第二个月的月底开始生它们的下一代小兔子,这样一代一代生下去,求解兔子增长数量的数列。
输入
第1行是测试数据的组数n,后面跟着n行输入。每组测试数据占1行,包括一个正整数a(1 <= a <= 20)
输出
输出有1行,每行输出对应一个输入。输出应是一个正整数序列,整数之间用空格分开。
样例输入
3
3
2
1
样例输出
1 1 2
1 1
1
::此题算是一个经典题了,在java经典50道题中第一道就是这个题,不过是要求不一样,这个题对于我来说考虑的就输出问题,怎么一他要求的输出格式去输出。
解题思路:
一张草稿纸,写出5天的兔子。
1天:1对
2天:1对
3天:2对
4天:3对
5天:5对
由此直接发现归路,从第三天起,兔子的数量就是前两天的兔子数量的和。
Java实现:
历史上的今天:
- 2020: 创业公司的套路有多深?(0)
本文章百度已收录,若发现本站有任何侵犯您利益的内容,请及时邮件或留言联系,我会第一时间删除所有相关内容。
2017年12月13日 20:09 沙发
猎场我也看完了。
2017年11月29日 14:12 板凳
技术男!
2017年11月29日 18:32 1层
@姜辰 条件所致,我内心是文艺的。
2017年11月28日 21:17 地板
猎头是很好看,我也看了好久!不过博主技术也不赖!
2017年11月29日 18:29 1层
@重庆学历提升 凑合
2017年11月28日 17:11 4楼
重庆的技术男博主,感觉你的生活很规范
2017年11月28日 20:46 1层
@重庆SEO 生活还没独立,被逼的
2017年11月28日 11:10 5楼
我也在追猎场
2017年11月28日 16:49 1层
@矫平机 可以,挺好看的
2017年11月28日 06:18 6楼
一般都是看港剧
2017年11月28日 16:46 1层
@绿软库 都感觉无聊了