能否一句代码,实现我要求的计算公式?
具体要求都在图片上了,大家看看可否实现,说明下,其中的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可以等于左移三位。
return abs(W*x) + abs(y) + 1 ;
[解决办法]
W*x + y + 1-(H>>31&0x01)*W*(H+1+2*x);
这个短点了
[解决办法]