生活随笔
收集整理的這篇文章主要介紹了
旋转数阵
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Description
把1到n2的正整數從左上角開始由外層至中心按照順時針方向螺旋排列
Input
輸入整數n (1 <= n <= 10)
Output
按示例輸出矩陣
Sample Input
3
4
Sample Output
1 2 3
8 9 4
7 6 5
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
C語言版本一
#include <stdio.h>
#include <stdlib.h>/* run this program using the console pauser or add your own getch, system("pause") or input loop */int main(int argc, char *argv[]) {int m,n;int a[10][10];int i,j;while(scanf("%d",&n)!=EOF&&n<=20)// while(scanf("%d %d",&n,&m)!=EOF&&n<=20&&m<=20)
{ m=n;int count=1;int left,right,up,down;left=m;right=-1;up=0;down=n;int head;head=1;i=0;j=0;while(count<=n*m){if(head==1){ a[i][j++]=count++;if(j==left){head=2;left-=1;j--;i++;}}else if(head==2){a[i++][j]=count++;if(i==down){head=3;down-=1;i--;j--; }}else if(head==3){a[i][j--]=count++;if(j==right){head=4;right+=1;j++;i--;}}else{a[i--][j]=count++;if(i==up){head=1;up+=1;i++;j++;}}} if(n<=3){for(i=0;i<=n-1;i++){ for(j=0;j<=m-2;j++){printf("%-2d",a[i][j]);}printf("%d\n",a[i][j]);}}else if(n==10){for(i=0;i<=n-1;i++){ for(j=0;j<=m-2;j++){printf("%3d ",a[i][j]);}printf("%3d\n",a[i][j]);}}else{for(i=0;i<=n-1;i++){ for(j=0;j<=m-2;j++){printf("%2d ",a[i][j]);}printf("%2d\n",a[i][j]);}
}
}return 0;
}
C語言版本二
#include<stdio.h>
int main() {int n, m, i, q, o, a[99][99];while (scanf("%d%d", &n, &m) != EOF) {if (m*n == 0)continue;for (i = 1; i <= n; i++)for (o = 1; o <= m; o++)a[i][o] = 0; q = o = 0; i = 1;while (q < m * n) {for (o++; ; o++) { if (a[i][o] != 0||o>m) { o--; break; }q++; a[i][o] = q; }for (i++; ; i++) { if (a[i][o] != 0||i>n) { i--; break; }q++; a[i][o] = q; }for (o--; ; o--) { if (a[i][o] != 0||o<1) { o++; break; }q++; a[i][o] = q; }for (i--; ; i--) { if (a[i][o] != 0||i<1) { i++; break; }q++; a[i][o] = q; }}for (o = 1; o <= n; o++) {for (i = 1; i <= m; i++){printf("%2d", a[o][i]);if (i != m)printf(" ");} printf("\n");}}return 0;
}
總結
以上是生活随笔為你收集整理的旋转数阵的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。