作者perry0627 ( ̄︿ ̄)
看板Programming
标题Re: [问题] 设计特殊的阵列
时间Sat Sep 8 21:56:39 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?
我想应该是这样的
global variable如下
int mult, zero_time;
struct element{
float value;
int time;
} arry[n];
INITIAL(){
for(int i = 0 ; i < n ; i++)
arry[i].value = 0;
mult = 1;
zero_time = 0;
}
write(k,m){
arry[k].value = m / mult;
arry[k].time = zero_time;
}
read(k){
return (arry[k].time != zero_time? 0 : arry[k].value*mult);
}
multiplyall(n){
if(!n) return ;
mult *= n;
}
ZEROALL(){
zero_time ++;
}
题目说 multiplyall(n) 若n=0时则回传error的用意应该是
当执行过mult=0後,之後再执行multplyall就无意义了吧...再怎麽样结果都会是0!!
所以用一个时间去判断是否执行过zeroall就好了!
这是小弟胡乱猜想的解法,有错请鞭!!XD
--
复制下面蓝色区域并且贴上会断线,请勿尝试唷^_<
qqqqqqqqqqqqqg
y
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 111.243.51.73
※ 编辑: perry0627 来自: 111.243.51.73 (09/08 22:08)
1F:→ DJWS:zeroall记得初始化 mult = 1 36.225.135.221 09/09 09:54
2F:→ DJWS:执行过zeroall还是可以write/read 36.225.135.221 09/09 09:54