大家来帮忙分析下这些笔试题
本帖最后由 vnicer 于 2013-08-17 09:44:28 编辑
第一题:在一个恶意输入的环境中验证一个字符串是否为邮箱格式,不能使用正则表达式
第二题:在不使用第三方变量的情况下交换两个数字的值
第三题:有一个1001个元素的数组a[n],每个元素都在1-1000这些整数中取值,其中只有一个数值重复了,并且数组中每个元素只能被访问一次,设计一个算法找出这个重复的数字。
------解决方案--------------------1:直接截取@开始后面的字符串与现有邮箱进行判断
2:位运算?采用数环的方法
3:生成一个1001个值为0的数组,然后遍历原数组,原数组的值出现就在新数组对应下标值的元素值改为1,如果当1重复了那个值就出来了
------解决方案--------------------第一题:if else 一个一个判断
第二题:x=2
y=3
x=x+y=5
y=x-y=2
x=x-y=3
第三题:同楼上
------解决方案--------------------第三题
a[0]+a[1]+...a[1000]-(1+2+..+1000)得到重复数字
------解决方案--------------------第一题用
indexOf(String,From);
检测是否只存在@和.,并且.出现在@后
------解决方案--------------------第一题 恶意输入,可能是字符随机产生,不能用正则,那么进行简单地遍历,判断@和.com的存在。
第二题 c语言的书上有过,忘了,查了之后想起来了,X,Y
X= X+Y; Y = X -Y; X = X- Y
第三题 不知道可不可以排序,从小到大,1001个数,左边500个数分别加上999,,998.。。为1000,右边500个加上1,2,。。。。因为有重复,所以有个数的和不为1000
------解决方案--------------------第一题 将字符串放到char[] 判断是否存在关键字符以及顺序
第二题 a=a+b;b=a-b;a=a-b; a=a^b;b=a^b;a=a^b;
第三题 int sum = 0,x=0;
for(int i:arr){
sum +=i;
}
循环结束后用sum减去1加到1000的和就是那个重复的数了
------解决方案--------------------第三题 用一个变量保存数组的值,用一个变量保存1-1000的值求余就可以了
------解决方案--------------------第一题,indexof,SubString都可以判断
第二题,用异或,加减都可以 a=a^b,b=a^b,a=a^b
第三题,把1001个数组加起来 - (1+1000)*1000/2 得出的结果就是那个重复的