几个看似简单的笔试题!

时间:2021-09-01 04:48:18

  要求先说明思路,再写算法。  
  <1>.两个长整形整数相乘,例如(354297681305798423581686128 * 357498615387056495366)写一个算法。
  <2>.将一个整形数组里面的数据循环右移,不能引入中间变量,效率为O(N);
  <3>.有一个整形数组,将数组中的数据第一个与最后一个互换位置,第二个与倒数第二个互换位置,
      依次类推,不能引入中间变量。
  <4>.在漆黑的夜里,四位旅行者来到了一座狭窄而且没有护栏的桥边。
      如果不借助手电筒的话,大家是无论如何也不敢过桥去的。
      不幸的是,四个人一共只带了一只手电筒,而桥窄得只够让两个人同时过。
      如果各自单独过桥的话,四人所需要的时间分别是1、2、5、8分钟;
      而如果两人同时过桥,所需要的时间就是走得比较慢的那个人单独行动时所需的时间。
      问题是:如何设计一个方案,让这四人尽快过桥。

30 个解决方案

#1


mark

学好了再来做!

劫……劫……劫……劫……劫……劫……劫……劫……劫……劫……

劫个方案

#2


等答案

#3


不能引入中间变量,那些数组索引放在哪里?

#4


第一个简单,体力活。
第二个简单,两两交换,从右到左即可。
第三个简单,和第2个有啥区别?
第四个不会。。。这类题都不会。。。 。。。MARK

#5


1.大数乘法,用数组表示大数。
2.从最后一个开始交换两个相邻的数,交换方法为异或
3.交换,异或
4.2+1+8+2+2 = 15

#6


我靠,回帖速度明显不行啊......

#7


(1)用数组存储
(4)由最快人带路。时间:2+1+5+1+8=17

#8


1.请google“大数乘法”
2.请google“翻手法”如果google能力不过关,请直接看http://topic.csdn.net/u/20091030/15/fc47f725-81fa-4c0d-b3a4-09dd9453f64d.html

3.a^=b;b^=a;a^=b;这样三句后,ab就互换了……
4.最快是2+1+8+2+2

#9


1. 纯模拟手算
2. 翻转再翻转
3. 翻转
4. 最快的那个人多走几趟

#10


3 可以用push ,pop吧!

#11


第一个数组存储
第二个 第三个差不多。。异或。。
最后一个15
12->2
1<-1
58->8
2<-2
12->2

#12


出主意的不少,哪位写写2或者3的不用中间变量算法?

#13


引用 12 楼 m_s_d_n 的回复:
出主意的不少,哪位写写2或者3的不用中间变量算法?

8楼有提示……

#14


难道索引位置不用变量存放?

引用 13 楼 mstlq 的回复:
引用 12 楼 m_s_d_n 的回复:
 出主意的不少,哪位写写2或者3的不用中间变量算法?

 8楼有提示……

#15


(3)计算数组下标的变量算不算中间变量?

#16


数组下标应该不算,反正就是不能再自己定义另外的变量。

#17


引用 16 楼 zhouqian88423 的回复:
数组下标应该不算,反正就是不能再自己定义另外的变量。


那保存数组下标的变量也是自己定义的啊,这不没法玩了。


for (int i = ArrayLength-1; i > 0; i--)
{
    Array[i] ^= Array[i-1];
    Array[i-1] ^= Array[i];
    Array[i] ^= Array[i-1];
}


这里i也算中间变量?那还玩什么?

#18


引用 8 楼 mstlq 的回复:
1.请google“大数乘法”
2.请google“翻手法”如果google能力不过关,请直接看http://topic.csdn.net/u/20091030/15/fc47f725-81fa-4c0d-b3a4-09dd9453f64d.html

3.a^=b;b^=a;a^=b;这样三句后,ab就互换了……
4.最快是2+1+8+2+2


顶顶更健康

#19


1. 大整数乘法
2. 翻转数组
3. 也是翻转, 用mstlq的更好
4 up mstlq的解法

#20


等答案

#21


1.请google“大数乘法” 
2.请google“翻手法”如果google能力不过关,请直接看http://topic.csdn.net/u/20091030/15/fc47f725-81fa-4c0d-b3a4-09dd9453f64d.html 

听说google里面有很多牛人写的经典代码,请问高手哪有找的啊?

#22


mark

#23


引用 13 楼 mstlq 的回复:
引用 12 楼 m_s_d_n 的回复:
出主意的不少,哪位写写2或者3的不用中间变量算法?

8楼有提示……

UP

#24


http://download.csdn.net/source/1498465
直接下载就好了,超长整数的乘法

#25


大致就是 
1.定义数组
类似: int a[100],b[100],c[100],sign;
把你要加的两个数的没一位都放到数组中 例如a[0]=8,a[1]=2......
然后算加法 进位给sign在下次加的时候一起加上 
例如 c[i]=a[i]+b[i]+sign
    sign=c[i]/10;
    c[i]=c[i]%10;
2和三都差不多 就是循环变量控制的事 不用低三数交换值用  
a=a^b;
b=a^b;
a=a^b;
这种方法就可以了

4.就是智力题了 先1和2过 2回 再5和8过 1回 在1和2过 就全过去了 时间为 2+2+8+1+2=15

#26


听说google里面有很多牛人写的经典代码,请问高手哪有找的啊?

#27


1.大数乘法
2.a = a + b,b = a - b, a = a - b

#28


upup,these quetions can find answers in google or baidu easily!

#29


惭愧,学习了。

#30


顶啊

#1


mark

学好了再来做!

劫……劫……劫……劫……劫……劫……劫……劫……劫……劫……

劫个方案

#2


等答案

#3


不能引入中间变量,那些数组索引放在哪里?

#4


第一个简单,体力活。
第二个简单,两两交换,从右到左即可。
第三个简单,和第2个有啥区别?
第四个不会。。。这类题都不会。。。 。。。MARK

#5


1.大数乘法,用数组表示大数。
2.从最后一个开始交换两个相邻的数,交换方法为异或
3.交换,异或
4.2+1+8+2+2 = 15

#6


我靠,回帖速度明显不行啊......

#7


(1)用数组存储
(4)由最快人带路。时间:2+1+5+1+8=17

#8


1.请google“大数乘法”
2.请google“翻手法”如果google能力不过关,请直接看http://topic.csdn.net/u/20091030/15/fc47f725-81fa-4c0d-b3a4-09dd9453f64d.html

3.a^=b;b^=a;a^=b;这样三句后,ab就互换了……
4.最快是2+1+8+2+2

#9


1. 纯模拟手算
2. 翻转再翻转
3. 翻转
4. 最快的那个人多走几趟

#10


3 可以用push ,pop吧!

#11


第一个数组存储
第二个 第三个差不多。。异或。。
最后一个15
12->2
1<-1
58->8
2<-2
12->2

#12


出主意的不少,哪位写写2或者3的不用中间变量算法?

#13


引用 12 楼 m_s_d_n 的回复:
出主意的不少,哪位写写2或者3的不用中间变量算法?

8楼有提示……

#14


难道索引位置不用变量存放?

引用 13 楼 mstlq 的回复:
引用 12 楼 m_s_d_n 的回复:
 出主意的不少,哪位写写2或者3的不用中间变量算法?

 8楼有提示……

#15


(3)计算数组下标的变量算不算中间变量?

#16


数组下标应该不算,反正就是不能再自己定义另外的变量。

#17


引用 16 楼 zhouqian88423 的回复:
数组下标应该不算,反正就是不能再自己定义另外的变量。


那保存数组下标的变量也是自己定义的啊,这不没法玩了。


for (int i = ArrayLength-1; i > 0; i--)
{
    Array[i] ^= Array[i-1];
    Array[i-1] ^= Array[i];
    Array[i] ^= Array[i-1];
}


这里i也算中间变量?那还玩什么?

#18


引用 8 楼 mstlq 的回复:
1.请google“大数乘法”
2.请google“翻手法”如果google能力不过关,请直接看http://topic.csdn.net/u/20091030/15/fc47f725-81fa-4c0d-b3a4-09dd9453f64d.html

3.a^=b;b^=a;a^=b;这样三句后,ab就互换了……
4.最快是2+1+8+2+2


顶顶更健康

#19


1. 大整数乘法
2. 翻转数组
3. 也是翻转, 用mstlq的更好
4 up mstlq的解法

#20


等答案

#21


1.请google“大数乘法” 
2.请google“翻手法”如果google能力不过关,请直接看http://topic.csdn.net/u/20091030/15/fc47f725-81fa-4c0d-b3a4-09dd9453f64d.html 

听说google里面有很多牛人写的经典代码,请问高手哪有找的啊?

#22


mark

#23


引用 13 楼 mstlq 的回复:
引用 12 楼 m_s_d_n 的回复:
出主意的不少,哪位写写2或者3的不用中间变量算法?

8楼有提示……

UP

#24


http://download.csdn.net/source/1498465
直接下载就好了,超长整数的乘法

#25


大致就是 
1.定义数组
类似: int a[100],b[100],c[100],sign;
把你要加的两个数的没一位都放到数组中 例如a[0]=8,a[1]=2......
然后算加法 进位给sign在下次加的时候一起加上 
例如 c[i]=a[i]+b[i]+sign
    sign=c[i]/10;
    c[i]=c[i]%10;
2和三都差不多 就是循环变量控制的事 不用低三数交换值用  
a=a^b;
b=a^b;
a=a^b;
这种方法就可以了

4.就是智力题了 先1和2过 2回 再5和8过 1回 在1和2过 就全过去了 时间为 2+2+8+1+2=15

#26


听说google里面有很多牛人写的经典代码,请问高手哪有找的啊?

#27


1.大数乘法
2.a = a + b,b = a - b, a = a - b

#28


upup,these quetions can find answers in google or baidu easily!

#29


惭愧,学习了。

#30


顶啊