2015年12月
JavaScript 运算符与强制类型转换
对于弱类型语言而言,隐式的类型转换永远是个大坑,你永远不知道什么时候会踩到坑。
好不容易做完了课设,到复习期间大概还有那么几天时间,准备稍微看看红宝书——JavaScript高程,当年什么都不懂看到脑袋爆炸,现在虽然表面上看着写写JavaScript已经没什么问题,实际上对于很多东西依旧不是很清楚。
这次就刚看到一个很好玩的东西。
首先:
1.1 + "1.1" // "1.11.1"
+"1.1" + 1.1 // 2.2
"1.1" - 1.1 // 0
1.1 - "1.1" // 0
这里我们大概需要知道的是,如果一个字符串可以转换为数字(内部调用的是Number()
函数),那么在转为数字后可以参与运算了,但是如果是字符串加上数字,那么可以视其为字符串拼接。
比如第一个就是明显的字符串拼接。但是如果加上符号,那么就会先进行一个类型转换,在与后面的数字运算。
而减法不具有拼接效果,因此就是转换啦。
蓝桥杯 基础练习 01字串
对于长度为5位的一个01串,每一位都可能是0或1,一共有32种可能。它们的前几个是:
00000
00001
00010
00011
00100
请按从小到大的顺序输出这32种01串。
对于这题,你想到了什么吗?
没错,这题其实是二进制加法的变种,依次递增而已,并没有什么区别。
事实上,上学期写过二进制加法的代码,感觉应该不太难,结果脑子生锈了。
本题没有输入,我们来看看代码吧,因为只是一个二进制累加问题:
蓝桥杯 基础练习 字母图形
利用字母可以组成一些美丽的图形,下面给出了一个例子:
ABCDEFG
BABCDEF
CBABCDE
DCBABCD
EDCBABC
这是一个5行7列的图形,请找出这个图形的规律,并输出一个n行m列的图形。
这题的问题不大,关键是找规律,很快我们就看出来,第一行和第一列是字母顺序,而剩下的则是对角线相同的关系。
数字规模也非常小,那就好说了。
import java.util.*;
public class AlphamosicGraphics {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int m = in.nextInt();
char[][] arr = new char[n][m];
for (int i = 0; i < n; i++) {
arr[i][0] = (char)('A' + i);
}
for (int i = 0; i < m; i++) {
arr[0][i] = (char)('A' + i);
}
for (int i = 1; i < n; i++) {
for (int j = 1; j < m; j++) {
arr[i][j] = arr[i - 1][j - 1];
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
System.out.print(arr[i][j]);
}
System.out.println("");
}
}
}
蓝桥杯 基础练习 十六进制转八进制
这道坑爹题真是让人绞尽脑汁,实际上我觉得大家应该也能感受到,很多看似不难的算法题实际上难度在于——如何处理大数的情况,这道题也是一样。
这题是一道非常好的题,因为我不熟悉Java,对于各种类都不太清楚,也没什么感觉,但这题让我了解到了很多类/方法的差别,很具有学习价值。
给定n个十六进制正整数,输出它们对应的八进制数。
输入的第一行为一个正整数n (1<=n<=10)。
接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。
输入的十六进制数不会有前导0,比如012A。
输出的八进制数也不能有前导0。
很明显的进制转换,刚开始我们想到的肯定是:既然是Java,大概会有进制转换的函数——一查,当然是有的:
Integer.toOctalString(Integer.valueOf(x, 16))
这个方法的连用也就是将16转成转成10进制再转成八进制。
蓝桥杯 入门训练 序列求和
这一道题本来应该很简单:
求1+2+3+...+n的值。
简单吧,一个循环就能搞定,看上去是这样,但是事实上,我们要注意到数据规模:
1 <= n <= 1,000,000,000。
本题直接的想法是直接使用一个循环来累加,然而,当数据规模很大时,这种“暴力”的方法往往会导致超时。此时你需要想想其他方法。你可以试一试,如果使用1000000000作为你的程序的输入,你的程序是不是能在规定的上面规定的时限内运行出来。
嗯,那么就会遇到运行的问题。但是这种东西有什么好方法么——答案是,有的,名为等差数列求和公式的东西。
讲到这里,基本上大家也发现了,许多题都是在考你的数学能力。
蓝桥杯 入门训练 Fibonacci数列
很早写好了一直没写笔记,其实算法是个很微妙的数学问题,简单的题还是难得题基本上感觉都是数学不过关……
Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1。
当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少。
以前用C语言也写过斐波那契数列,不过内容不同,如果不知道斐波那契是什么的话,可以看看:http://codesky.me/archives/c-fibonacci-series.wind
事实证明,用直接递归求的方法确实不现实,但是人家有提示嘛:
在本题中,答案是要求Fn除以10007的余数,因此我们只要能算出这个余数即可,而不需要先计算出Fn的准确值,再将计算的结果除以10007取余数,直接计算余数往往比先算出原数再取余简单。
由于在下的数学实在是一团糟,所以根本不知道发生了什么。
CSS 优雅的在table中居中div
在周五的时候,某同学给我发了一个网页,大致想知道这是怎么实现的。
网址在这里:http://dota2.gamepedia.com/Dota_2_Wiki
首先思考了一下,第一,是居中,居中我们使用的text-align: center
,说真的,这个刚开始我还犹豫了一下,不过发现确实是通过这个实现的。
但是在最后一行两格的情况,会发生最后一行居中而不是这个效果,那么接下来这个效果是怎么做的呢。
它是通过n个计算好长度的div
来实现的。该div
的width和其他一样而height为0,这样就能实现这种效果了,而n的值应该也是计算好的,或者多加也无所谓,总之是个很微妙的实现方式,也算挺有趣。
具体的demo,有空再来,诸位看官现在可以在此网站右键审查元素。
蓝桥杯 入门训练 圆的面积
最近在刷蓝桥杯的题,主要是比较简单,顺便可以练练自己的Java能力,因为光看书记不住实在不靠谱。
入门训练其实是熟悉OJ,理论上而言没什么好说的,但其实还是有很多疑问的。
比如这道圆的面积:
给定圆的半径r,求圆的面积。
输入包含一个整数r,表示圆的半径。
HTML 给后端传入数组与check默认值
在使用checkbox中,很多时候,我们其实是要传入数组的,实际上,在
HTML中,只要将name
设置为check[]
即可。
这样在PHP中获取到的check
就是一个数组的形式。
此外,有些时候,即使不勾选,我们依旧需要check
拥有一个不勾选的默认值,然而,check
默认只有勾选项才会传入值,解决方法挺有意思的:
<input type="hidden" value="0" name="check[{{$list->id}}]">
加入一个相同name的hidden,如果不勾选,就会传入此值,否则,checkbox中的值将会覆盖原值,相当有趣。