avatar
l*b
1
刚刚电面的。东欧人,320 * 200 的screen,只能表示黑白2种颜色。要求你写一个
flip的function把某个长方形区域里面的pixel由黑变成白或者由白变成黑。
小结一下,一开始就说了用bit vector,结果觉得后悔了,应该先用int array的,这
样下手会快很多。结果一下子用一个array去表示,想怎么从x,y变成array index想了
半天。大脑抽筋了。
avatar
p*y
2
没看懂,应该不是flip一个指定位置的pixel吧,flip以后要达到什么要求呢?
avatar
f*e
3
好像是两个binary index tree在一起。

【在 p*****y 的大作中提到】
: 没看懂,应该不是flip一个指定位置的pixel吧,flip以后要达到什么要求呢?
avatar
w*a
4
这个让我回忆起了以前做DirectDraw的时光。。。
avatar
e*s
5
void filp(int startX, int startY, int endX, int endY){
}
这样一个方法?
avatar
l*b
6


【在 e***s 的大作中提到】
: void filp(int startX, int startY, int endX, int endY){
: }
: 这样一个方法?

avatar
h*o
7
这个DFS可以吗?

【在 l**b 的大作中提到】
: 刚刚电面的。东欧人,320 * 200 的screen,只能表示黑白2种颜色。要求你写一个
: flip的function把某个长方形区域里面的pixel由黑变成白或者由白变成黑。
: 小结一下,一开始就说了用bit vector,结果觉得后悔了,应该先用int array的,这
: 样下手会快很多。结果一下子用一个array去表示,想怎么从x,y变成array index想了
: 半天。大脑抽筋了。

avatar
r*k
8
为啥我觉得直接a[i][j] = 1 - a[i][j]就好了?

【在 l**b 的大作中提到】
: 刚刚电面的。东欧人,320 * 200 的screen,只能表示黑白2种颜色。要求你写一个
: flip的function把某个长方形区域里面的pixel由黑变成白或者由白变成黑。
: 小结一下,一开始就说了用bit vector,结果觉得后悔了,应该先用int array的,这
: 样下手会快很多。结果一下子用一个array去表示,想怎么从x,y变成array index想了
: 半天。大脑抽筋了。

avatar
e*s
9
保证startX < endX; startY < end Y;
然后两层for循环不就完了吗?
是不是我miss something 了?
avatar
h*u
10
这题用int存pixel有点浪费空间的感觉吧?
avatar
c*r
11
大家看看这么写对不对
void flip(int[][]screen, int x,int y){
if(x<0 || x> 320 || y<0 ||y>200) return;
if(screen[y][x] == 0){
screen[y][x] =1; // assuming 0 is black, 1 is white
}

flip(screen, x-1,y) //left
flip(screen, x+1, y) //right
flip(screen, x,y+1) //top
flip(screen, x,y-1) //below
}
avatar
s*r
12
我最不喜欢听东欧人的口音了
avatar
n*e
13
这题肯定是embedded,最好能做in-place的,所以不要用归递,多省点空间。

【在 c********r 的大作中提到】
: 大家看看这么写对不对
: void flip(int[][]screen, int x,int y){
: if(x<0 || x> 320 || y<0 ||y>200) return;
: if(screen[y][x] == 0){
: screen[y][x] =1; // assuming 0 is black, 1 is white
: }
:
: flip(screen, x-1,y) //left
: flip(screen, x+1, y) //right
: flip(screen, x,y+1) //top

avatar
c*r
14
怎么个in-place法呢?两个for loop?能否给个code

【在 n***e 的大作中提到】
: 这题肯定是embedded,最好能做in-place的,所以不要用归递,多省点空间。
avatar
n*e
15
啊呀,老是不用C,都忘光了,献丑了,要是有问题请指教!
void flip(char* pbuf,int x,int y,int w,int h)
{
int stride = 40;// 320/8 or (width>>3)+(width&0x7)>1;
int i = 0;
int width = w;
pbuf+=y*stride;
while(h--){
width = w;
for(i=x;(width--)>0;i++){
pbuf[i/8]^=1<}
pbuf+=stride;
}
}

【在 c********r 的大作中提到】
: 怎么个in-place法呢?两个for loop?能否给个code
avatar
h*6
16
好不容易学的差不多了,在DirectX9里面居然给取消了。

【在 w****a 的大作中提到】
: 这个让我回忆起了以前做DirectDraw的时光。。。
avatar
c*r
17
大牛不用C就是用Java写吧。。

【在 n***e 的大作中提到】
: 啊呀,老是不用C,都忘光了,献丑了,要是有问题请指教!
: void flip(char* pbuf,int x,int y,int w,int h)
: {
: int stride = 40;// 320/8 or (width>>3)+(width&0x7)>1;
: int i = 0;
: int width = w;
: pbuf+=y*stride;
: while(h--){
: width = w;
: for(i=x;(width--)>0;i++){

avatar
s*r
18
让我想起来做图像。。。!%!¥#@!¥@#¥!@#¥
avatar
s*r
19
为啥我也这么觉得。。。。

【在 r******k 的大作中提到】
: 为啥我觉得直接a[i][j] = 1 - a[i][j]就好了?
avatar
s*n
20
好久没写 C了。
byte* flip(byte* screen, int x, int x1,int y, int y1){
byte[40] xfilter ={0};
for (int j = 0 ; j < 320; j ++){
if (j < x || j> x1)
xfilter[j/8] &= ~1<< (j%8);
else
xfilter[j/8] |= 1<< (j%8);
}


for (int i = 0; i < x * y/8; ++){
int line = i/40;

if (line < y || line > y1)
continue;
screen[i] ^= yfilter[i];
}
return screen;
}
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。