作者yauhh (哟)
看板Programming
标题Re: [问题] 设计特殊的阵列
时间Fri Sep 7 23:00:02 2012
※ 引述《wsx02 ()》之铭言:
: http://ppt.cc/71it
: 大意是说 呼叫multiplyall(n)会把阵列所有的元素都乘以n 但只花O(1)
: 然後(b)提到的zeroall()我想应该就呼叫multiplyall(0)就可以了吧?
: 请问multiplyall(n)应该用怎样的设计方式 让他只花O(1)呢?
: 谢谢!
: 我自己偷吃步的想法是 虽然题目说要改变阵列中全部的element 可是没说要全部印出来
: 只说这个阵列要能支援initial(),write(k,m),read(k),multiplyall(n)而已
: 不知道可不可以令一个全域变数temp 把multiplyall(n)的n指定给temp
: 当阵列要read的时候把element乘以temp?
不是偷吃步的方法啊,这就是设计一组资料结构:
a) 用大概C的语言,这个阵列起码包含一些全域变数:
double a[];
long long len = N;
double mul;
void INITIAL() {
a = (double*)malloc(sizeof(double) * len);
mul = 1;
}
void multiplyall(double n) {
if (abs(n) < 0.000001) exit(ERROR);
mul *= n;
}
double read(long long k) {
return a[k] * mul;
}
void write(long long k, double m) {
a[k] = m / mul; //所以不可以multiplyall(0)把 mul 设定为0.
}
至於 ZEROALL() 嘛, 有点难.
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 36.226.94.15
1F:→ bibo9901:calloc ? 118.169.158.96 09/08 00:14
2F:→ yauhh:回答这一题,用calloc是犯规的 36.226.94.15 09/08 00:40
3F:推 wsx02:谢谢 114.42.91.45 09/08 20:22
4F:→ MOONRAKER:何不用一个flag来做zeroall 114.45.202.196 09/09 02:53
5F:→ MOONRAKER:就像逻辑电路里的reset一样 114.45.202.196 09/09 02:53
6F:→ yauhh:不行. zeroall()然後write(k,m)就破功 36.226.101.187 09/09 04:49
7F:推 DJWS:MOONRAKER说的是可以做到的 36.225.135.221 09/09 09:49
8F:→ DJWS:只是因为这一题并不是针对逻辑电路而已... 36.225.135.221 09/09 09:52
9F:→ MOONRAKER:对喔,程式中绝不可能达到相同效果。 114.45.202.196 09/09 11:42