-
#include
#include
#define maxn 20
int a[maxn][maxn];
int main()
int n;
int x, y, k;
scanf("%d", &n);
x = 0;
y = 0;
memset(a, 0, sizeof(a));將 a 陣列中的元素設定為 0
a[x][y]= k = 1;
撞牆時 (k < n * n)。
while(y + 1 < n &&a[x][y+1] == 0) 第 n 個圓的第一行。
a[x][+y] = ++k;
while(x + 1 < n &&a[x+1][y] == 0) 第 n 個圓圈的最後一列。
a[++x][y] = ++k;
while(y - 1 >= 0 &&a[x][y-1] == 0) 第 n 個圓圈的最後一行。
a[x][-y] = ++k;
while(x - 1 >= 0 &&a[x-1][y] == 0) 第 n 個圓的第一列。
a[--x][y] = ++k;
例如,n = 4
有 2 圈。 當我們完成最外層 (n = 2) 的圓圈時,n - 1 ) 圈的起點再次是左上角的位置,另乙個迴圈......
輸出結果。 for(x = 0; x < n; x++)
for(y = 0; y < n; y++)
printf("%3d", a[x][y]);
printf("");
return 0;
-
直接列舉。
白哪一點。
哪個職位已經調到智道
它變成了 2,0 1,0 0,0
它相當於版本 A i,j 變成 2-j,i 可以使用一次。
-
使用鍊表很容易做到這一點...... 製作乙個迴圈鍊表。
-
設矩陣的行數為 r,列數為 c,則元素 a[i][j] 的順時針旋轉公式應如下:
a[i][j] -a[x][y]
if(i >0 &&&i 0 &&&j < c-1)else if(i = 0 &&j< c-1)else if(i == r-1 &&&j > 0)else if(j==0 &&&i > 0)else if(j==c-1 &&&i 旋轉 n 次,即連續對 a[i][j] 進行上述操作 n 次。
-
以下是順時針旋轉 90° 的示例:
#include
#include
#include
#define n 4
void main()
int i,j;
int a[n*n],b[n][n];在這裡,您將矩形設定為旋轉 4x4,並在此處將其更改為不同的矩形。
int *p=a;使用指標指向此一維陣列。 這樣可以更輕鬆地輪換分配。
srand(time(null));
for(i=0;i=0;i--) 旋轉分配,您可以在其中修改旋轉的方向和角度。
for(j=0;j
對於這種旋轉矩形,我個人建議生成乙個一維陣列,用指標指向變化陣列,然後用指標賦值; 你也可以生成乙個二維陣列,定義乙個陣列指標指向,這有點麻煩。
-
我會數一數你問的第乙個矩陣:
#include
main()}
-
試試吧,我自己在網咖裡寫的。
#include
#include
void main()
break;
case 1:
x++;if(x>=n||p[x*n+y]!='\0')break;
case 2:
y--;if(y<0||p[x*n+y]!='\0')break;
case 3:
x--;if(x<0||p[x*n+y]!='\0')break;}}
for(int i=0;i
-
#include
void fun(int m,int n)}else if(point%4==3) on}}for(i=0; ifor(i=0;ifor(i=0;idelete [m]a[i];
delete [i]a;
a=null;
void main()
絕對符合您的要求。