题目描述:
如图所示,
有一个边长为2的幂次的正方形,比如图中边长为4的正方形,标记了5*5个数字,通过这些数字,依次输出的正方形如下:
0 4 20 24
0 2 10 12
0 1 5 6
1 2 6 7
5 6 10 11
6 7 11 12
2 4 12 14
。。。。
根据上述规律,在输入正方形边长的情况下,输出正方形
参考代码:
#include <stdio.h>
int IsEdgeEnable(int nEdge)
{
int nValue = 1, i;
for (i = 1; i <= 31; i++)
{
if (nEdge == nValue)
return 1;
nValue *= 2;
}
return 0;
}
void Search(int start, int edgeLength, int dimension)
{
printf("%d %d %d %d\n", start, start + edgeLength, start + edgeLength * dimension, start + edgeLength + edgeLength * dimension);
if (1 == edgeLength)
return;
Search(start, edgeLength / 2, dimension);//递归输出正方形第左上角块区域
Search(start + edgeLength / 2, edgeLength / 2, dimension);//递归输出正方形第右上角块区域
Search(start + edgeLength / 2 * dimension, edgeLength / 2, dimension);//递归输出正方形左下角区域
Search(start + edgeLength / 2 + edgeLength / 2 * dimension, edgeLength / 2, dimension);//递归输出正方形右下角区域
}
int main()
{
int n;
printf("输入正方形边长: ");
scanf_s("%d", &n);
if (IsEdgeEnable(n))
{
Search(0, n, n + 1);
}
else
{
printf("你输入的边长有误,请输入2的幂次的边长\n");
return 0;
}
return 0;
}
输出结果: