首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

能否一句代码,实现小弟我要求的计算公式

2012-03-21 
能否一句代码,实现我要求的计算公式?具体要求都在图片上了,大家看看可否实现,说明下,其中的W、H宽高等是变

能否一句代码,实现我要求的计算公式?


具体要求都在图片上了,大家看看可否实现,说明下,其中的W、H宽高等是变化的,求出指明的X,Y所在的由下至上的位置!!!

[解决办法]
//没有任何分支语句

#include <stdio.h>

#define W(8)
#define H(6)

int xy[H][W];

void print_WH(int h)
{
int x, y, v, k, b;

v = 1;
b = ( h >> 31 ) & 0x1;
k = -2 * b + 1;

for ( y = 0; y < H; y++ )
{
for ( x = 0; x < W; x++ )
{
xy[k * y + b * 5][x] = v++;
}
}

for ( y = 0; y < H; y++ )
{
for ( x = 0; x < W; x++ )
{
printf("%2d ", xy[y][x]);
}
printf("\n");
}
printf("\n");
}


int main()
{
print_WH(H);

print_WH(-H);

return 0;
}

[解决办法]
一句代码,不过直接用了abs,你实在要优化就把abs改成&的判断,如果W是8,乘8可以等于左移三位。

C/C++ code
return abs(W*x) + abs(y) + 1 ;
[解决办法]
W*x + y + 1-(H>>31&0x01)*W*(H+1+2*x);

这个短点了
[解决办法]
探讨
错了错了,我晕。。。是 + 不是 -

C/C++ code

左偏移 = 起始点 - 符号 * (y + 1) - 1
//修改为:
左偏移 = 起始点 - 符号 * (y + 1) + 最高位
//就正确了
//最终代码应该是:
(h >> 31 * h + h - ((h >> 31) | 0x1) * (y + 1) + h >> 31) * w + x + 1


……

热点排行