首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

闲来无事,写个盘旋数组

2012-08-29 
闲来无事,写个回旋数组C/C++ code#include stdio.hvoid spin()//回旋数组{int matrix[10][10]int col,r

闲来无事,写个回旋数组

C/C++ code
#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();}


[解决办法]
没的环境,来看一下,show一下结果
[解决办法]
好。顶一下。
C/C++ code
[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
[解决办法]
还以为写的是数据轮盘呢,原来是个小矩阵
[解决办法]
哥年轻时候也写过。。。
[解决办法]
探讨

哥年轻时候也写过。。。

[解决办法]
探讨
引用:

哥年轻时候也写过。。。


哥几个月前还是年轻的。

[解决办法]
说句实话,LZ写的好长,不过还好,没使用递归...........

C/C++ code
#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;} 


[解决办法]
狗尾续貂:

C/C++ code
#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");    }}
[解决办法]
一个循环数组不用写那么多行吧?
C/C++ code
#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;} 

热点排行