闲来无事,写个回旋数组
#include <stdio.h>void spin() //回旋数组{ int matrix[10][10]; int col,row,dir; col=0; row=0; int rotatenum=10; //回旋标准数,当curnum与其相等时,就反生转向 int curnum=0; dir=1;//1->右,2下,3左,4上 for (int i=1;i<10*10+1;i++) { matrix[row][col]=i; curnum++; switch(dir) { case 1: if(curnum==rotatenum) { row++; rotatenum--; dir=2; curnum=0; } else col++; break; case 2: if (curnum==rotatenum) { col--; dir=3; curnum=0; } else row++; break; case 3: if (curnum==rotatenum) { row--; dir=4; curnum=0; rotatenum--; } else col--; break; case 4: if (curnum==rotatenum) { col++; dir=1; curnum=0; } else row--; break; } } for (int p=0;p<10;p++) { for (int q=0;q<10;q++) { printf("%-3d ",matrix[p][q]); } printf("\n"); }}void main(){ spin();}[root@bogon home]# gcc -g -o q1 q1.c [root@bogon home]# ./q11 2 3 4 5 6 7 8 9 10 36 37 38 39 40 41 42 43 44 11 35 64 65 66 67 68 69 70 45 12 34 63 84 85 86 87 88 71 46 13 33 62 83 96 97 98 89 72 47 14 32 61 82 95 100 99 90 73 48 15 31 60 81 94 93 92 91 74 49 16 30 59 80 79 78 77 76 75 50 17 29 58 57 56 55 54 53 52 51 18 28 27 26 25 24 23 22 21 20 19
[解决办法]
还以为写的是数据轮盘呢,原来是个小矩阵
[解决办法]
哥年轻时候也写过。。。
[解决办法]
#include<iostream>using namespace std;int a[10][20]={0};int main(){ int i=1; int hang=0,lie=0; while(i<=200) { while(i<=200 && hang<10 && a[hang][lie]==0 ) a[hang++][lie]=i++;//向下 hang--;lie++; while(i<=200 && lie<20 && a[hang][lie]==0 ) a[hang][lie++]=i++;//向右 hang--;lie--; while(i<=200 && hang>-1 && a[hang][lie]==0 ) a[hang--][lie]=i++;//向上 hang++;lie--; while(i<=200 && lie>-1 && a[hang][lie]==0 ) a[hang][lie--]=i++;//向左 hang++;lie++; } //===========输出========= for(hang=0;hang<10;hang++) { for(lie=0;lie<20;lie++) printf("%3d ",a[hang][lie]); cout<<endl; } cout<<endl; return 0;}
[解决办法]
狗尾续貂:
#include <stdio.h>#define MAXN 10char m[MAXN+2][MAXN+2];char d;int x,y,k,n;void main() { while (1) { printf("Input n(1..%d):",MAXN); fflush(stdout); rewind(stdin); if (1==scanf("%d",&n)) { if (1<=n && n<=MAXN) break; } } y=0 ;for (x=0;x<=n+1;x++) m[y][x]=1; y=n+1;for (x=0;x<=n+1;x++) m[y][x]=1; x=0 ;for (y=0;y<=n+1;y++) m[y][x]=1; x=n+1;for (y=0;y<=n+1;y++) m[y][x]=1; for (y=1;y<=n;y++) { for (x=1;x<=n;x++) { m[y][x]=0; } } x=1; y=1; k=0; d='D'; while (1) { k++; if (k>n*n) break; m[y][x]=k; switch (d) { case 'D': if (0==m[y+1][x]) y++; else {x++;d='R';} break; case 'R': if (0==m[y][x+1]) x++; else {y--;d='U';} break; case 'U': if (0==m[y-1][x]) y--; else {x--;d='L';} break; case 'L': if (0==m[y][x-1]) x--; else {y++;d='D';} break; } } for (y=1;y<=n;y++) { for (x=1;x<=n;x++) { printf("%4d",m[y][x]); } printf("\n"); }}
[解决办法]
一个循环数组不用写那么多行吧?
#include <iostream>#include <cstdio>using namespace std;void array_circle(int n, int* output){ int val=1; for (int i=0; i<(n+1)/2; i++) { for (int j=i; j<n-i; j++) { output[n*i+j] = val++; } for (j=i+1; j<n-i; j++) { output[n*j+(n-1-i)] = val++; } for (j=n-2-i; j>i-1; j--) { output[n*(n-1-i)+j] = val++; } for (j=n-2-i; j>i; j--) { output[n*j+i] = val++; } }}int main(){ int n = 9; int *output = new int[n*n]; array_circle(n, output); for (int r=0; r<n; r++)//输出数组 { for (int c=0; c<n; c++) { printf("%3d ", output[r*n+c]); } cout<<endl; } return 0;}