吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 6119|回复: 3
收起左侧

[其他转载] [交流]我实现的一个螺旋数组(C++源码)

[复制链接]
iawen 发表于 2009-1-13 20:24
上次的一个CrackMe就是用的这个螺旋数组,不过没有在比较时进行处理!
而且参与的字符也比较少,只是4*4的一个规则数组,一步步跟还是容易的,呵呵!
大家有兴趣,可以自己动手实现一个,用更多的字符来实现,在比较前,再进行一定的处理!

下面是源码,:
/*
文件名:HelixArray.cpp
螺旋数组
作者:iawen
*/

#include<iostream>
using namespace std;

int main()
{
        int nR,nC;
        cout<<"请输入螺旋数组的维数(2维:行--列):";
        cin>>nR>>nC;
        cout<<"螺旋数组如下:\n";
        
        int *nArray=new int[nR*nC];
        int n=1;
        int i=0,j=0;
        int rowEnd=nR;        //避免修改
        int colEnd=nC;        //避免修改
        int nFlag=1;        //指定赋值方向:1向右 2向下 3向左 4向上
        
        while(1){
                int row=i;
                int col=j;
                
                if(nFlag==1){
                        for(col=j;col<colEnd;col++){
                                *(nArray+(row*nC)+col)=n;
                                n++;
                        }
                        nFlag=2;
                        i++;        
                }
                if(n>nR*nC)
                        break;
                
                if(nFlag==2){
                        col--;
                        for(row=i;row<rowEnd;row++){
                                *(nArray+(row*nC)+col)=n;
                                n++;
                        }
                        nFlag=3;
                        colEnd--;
                }
                if(n>nR*nC)
                        break;                
                if(colEnd<=1)
                        break;
                        
                if(nFlag==3){
                        row--;
                        for(col=colEnd-1;col>=j;col--){
                                *(nArray+(row*nC)+col)=n;
                                n++;
                        }
                        nFlag=4;
                        rowEnd--;
                }
                if(n>nR*nC)
                        break;        
                if(rowEnd<=1)
                        break;
                        
                if(nFlag==4){
                        col++;
                        for(row=rowEnd-1;row>=i;row--){
                                *(nArray+(row*nC)+col)=n;
                                n++;
                        }
                        nFlag=1;
                        j++;
                }
                if(n>nR*nC)
                        break;
        }
        
        //输出显示数组
        for(i=0;i<nR;i++){
                for(j=0;j<nC;j++){
                        cout.width(3);
                        cout<<*(nArray+(i*nC)+j)<<"  ";
                }
                cout<<endl;
        }
        
        delete [] nArray;
        return 0;
}
运行效果如图:
2009-01-13_202139.jpg
附件为编译好的控制台程序:

[ 本帖最后由 chenguo 于 2009-1-14 10:17 编辑 ]

HelixArray.rar

63.04 KB, 下载次数: 6, 下载积分: 吾爱币 -1 CB

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

zzage 发表于 2009-1-14 09:48
太过强大了..看得有点晕..
抢沙发,然后膜拜下老鸦
mycsy 发表于 2009-1-14 10:24
ohyeah521 发表于 2009-1-15 21:42
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 14:10

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表