要求先说明思路,再写算法。
<1>.两个长整形整数相乘,例如(354297681305798423581686128 * 357498615387056495366)写一个算法。
<2>.将一个整形数组里面的数据循环右移,不能引入中间变量,效率为O(N);
<3>.有一个整形数组,将数组中的数据第一个与最后一个互换位置,第二个与倒数第二个互换位置,
依次类推,不能引入中间变量。
<4>.在漆黑的夜里,四位旅行者来到了一座狭窄而且没有护栏的桥边。
如果不借助手电筒的话,大家是无论如何也不敢过桥去的。
不幸的是,四个人一共只带了一只手电筒,而桥窄得只够让两个人同时过。
如果各自单独过桥的话,四人所需要的时间分别是1、2、5、8分钟;
而如果两人同时过桥,所需要的时间就是走得比较慢的那个人单独行动时所需的时间。
问题是:如何设计一个方案,让这四人尽快过桥。
30 个解决方案
#1
mark
学好了再来做!
劫……劫……劫……劫……劫……劫……劫……劫……劫……劫……
劫个方案
学好了再来做!
劫……劫……劫……劫……劫……劫……劫……劫……劫……劫……
劫个方案
#2
等答案
#3
不能引入中间变量,那些数组索引放在哪里?
#4
第一个简单,体力活。
第二个简单,两两交换,从右到左即可。
第三个简单,和第2个有啥区别?
第四个不会。。。这类题都不会。。。 。。。MARK
第二个简单,两两交换,从右到左即可。
第三个简单,和第2个有啥区别?
第四个不会。。。这类题都不会。。。 。。。MARK
#5
1.大数乘法,用数组表示大数。
2.从最后一个开始交换两个相邻的数,交换方法为异或
3.交换,异或
4.2+1+8+2+2 = 15
2.从最后一个开始交换两个相邻的数,交换方法为异或
3.交换,异或
4.2+1+8+2+2 = 15
#6
我靠,回帖速度明显不行啊......
#7
(1)用数组存储
(4)由最快人带路。时间:2+1+5+1+8=17
(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
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. 最快的那个人多走几趟
2. 翻转再翻转
3. 翻转
4. 最快的那个人多走几趟
#10
3 可以用push ,pop吧!
#11
第一个数组存储
第二个 第三个差不多。。异或。。
最后一个15
12->2
1<-1
58->8
2<-2
12->2
第二个 第三个差不多。。异或。。
最后一个15
12->2
1<-1
58->8
2<-2
12->2
#12
出主意的不少,哪位写写2或者3的不用中间变量算法?
#13
8楼有提示……
#14
难道索引位置不用变量存放?
#15
(3)计算数组下标的变量算不算中间变量?
#16
数组下标应该不算,反正就是不能再自己定义另外的变量。
#17
那保存数组下标的变量也是自己定义的啊,这不没法玩了。
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
顶顶更健康
#19
1. 大整数乘法
2. 翻转数组
3. 也是翻转, 用mstlq的更好
4 up mstlq的解法
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
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
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
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
第二个简单,两两交换,从右到左即可。
第三个简单,和第2个有啥区别?
第四个不会。。。这类题都不会。。。 。。。MARK
#5
1.大数乘法,用数组表示大数。
2.从最后一个开始交换两个相邻的数,交换方法为异或
3.交换,异或
4.2+1+8+2+2 = 15
2.从最后一个开始交换两个相邻的数,交换方法为异或
3.交换,异或
4.2+1+8+2+2 = 15
#6
我靠,回帖速度明显不行啊......
#7
(1)用数组存储
(4)由最快人带路。时间:2+1+5+1+8=17
(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
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. 最快的那个人多走几趟
2. 翻转再翻转
3. 翻转
4. 最快的那个人多走几趟
#10
3 可以用push ,pop吧!
#11
第一个数组存储
第二个 第三个差不多。。异或。。
最后一个15
12->2
1<-1
58->8
2<-2
12->2
第二个 第三个差不多。。异或。。
最后一个15
12->2
1<-1
58->8
2<-2
12->2
#12
出主意的不少,哪位写写2或者3的不用中间变量算法?
#13
8楼有提示……
#14
难道索引位置不用变量存放?
#15
(3)计算数组下标的变量算不算中间变量?
#16
数组下标应该不算,反正就是不能再自己定义另外的变量。
#17
那保存数组下标的变量也是自己定义的啊,这不没法玩了。
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
顶顶更健康
#19
1. 大整数乘法
2. 翻转数组
3. 也是翻转, 用mstlq的更好
4 up mstlq的解法
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
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
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
2.a = a + b,b = a - b, a = a - b
#28
upup,these quetions can find answers in google or baidu easily!
#29
惭愧,学习了。
#30
顶啊