1、簡介
給出一個矩陣,順時針打印矩陣的數據
比如
int buf [4][4] =
{
{1,2,3,4},
{5,6,7,8},
{9,10,11,12},
{13,14,15,16}
};
打印出來的樣式應該爲1、2、3、4、8、12、16、15、14、13、9、5、6、7、11、10這樣的順時針方法
代碼實現的思想是翻滾法,脫衣法。
1、先實現矩陣的逆時針翻轉
2、每次翻轉打印第一行的數據,比如第一次1、2、3、4。第二次8、12、16。第三次15、14、13。
3、每次打印完自己需要的數據,翻轉4次後,就將矩陣不需要的數據去除,脫掉外面一圈的衣服,再翻轉內部的矩陣,重複上面的步驟。
2、代碼實現,代碼只實現了外圈翻轉的部分,內圈翻轉還沒實現,希望以後能實現。
#include "stdio.h"
//矩陣的大小
#define LEN 4
char buf[LEN][LEN] = {
{1,2,3,4},
{5,6,7,8},
{9,10,11,12},
{13,14,15,16}
};
char c[16] = { 0, };
//翻轉外圈
void fanzhuan(buf1)
{
static char m1 = 0;
char buftemp[4][4] = { 0, };
memcpy(buftemp, buf1,16);
for (int j = 0; j< LEN-1; j ++)
{
printf("%d ", buftemp[0][j]);
}
for (int i = 0; i < LEN; i++)
{
for (int j = 0; j < LEN; j++)
{
buf[LEN-1 - j][i] = buftemp[i][j];
}
printf("\n");
}
for (int i = 0; i < LEN; i++)
{
for (int j = 0; j < LEN; j++)
{
printf(" %d ", buf[i][j]);
}
printf("\r\n");
}
m1++;
}
int main()
{
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 4; j++)
{
printf(" %d ",buf[i][j]);
}
printf("\r\n");
}
for (int i = 0; i < 4; i++)
{
fanzhuan(buf);
}
getchar();
return 0;
}