1050 螺旋矩阵 申请二维数组

来源:互联网 发布:淘宝二姐家是正品吗 编辑:程序博客网 时间:2024/05/29 10:09

写的太麻烦还没有满分

http://www.cnblogs.com/rollenholt/articles/1907415.html  申请2维数组的2种方法


尝试了5 数组有问题说明方法不行,有漏洞

#include <stdio.h>

#include <iostream>
#include <string.h>
#include <string>
#include <vector>
#include <sstream>
#include <iomanip>
#include <cmath>
#include<limits>
#include <iostream>
#include <algorithm>
using namespace std;
int cmp(int a,int b)
{
return a>b;
}
int main()
{

int n;
cin>>n;


vector<int >a;
for(int i=0;i<n;i++)
{
int temp;
cin>>temp;
a.push_back(temp);
}
sort(a.begin(),a.end(),cmp);

int m=1,l;//m是列 小的  l是行 大的
for(int i=1;i<sqrt(double(n));i++)
{
int max=1;
if(n%i==0&&i>max) m=i;
}
l=n/m;
int x=0,y=-1;
int c=l,c1=m;
//int *q=new int [x][y];


int **q;
q = new int *[l];
for(int i = 0; i < l; i++)
q[i] = new int[m];






int k=1;//k是转动方向
int count=0;
int flag=0;//是l还是m进行运动的次数
int j=0;//总次数

for(int i=0;i<=m+l-2;i++)
{


if(k==1)  //m++  加 m次
{
for(int i=0;i<c1&&c1>0;i++)
{
y++;
q[x][y]=a[j++];
}
k++;
c--;
}
else if(k==2)//l++ m+
{
for(int i=0;i<c&&c>0;i++)
{
x++;
q[x][y]=a[j++];
}
k++;
c1--;
}
else if(k==3)
{
for(int i=0;i<c1&&c1>0;i++)
{
y--;
q[x][y]=a[j++];
}
c--;
k++;
}
else if(k==4)
{
for(int i=0;i<c&&c>0;i++)
{
x--;
q[x][y]=a[j++];
}
c1--;
k=1;
}



}
for(int i=0;i<l;i++)
for(int j=0;j<m;j++)
{
if(j!=m-1) cout<<q[i][j]<<' ';
else cout<<q[i][j]<<endl;
}








return 0;
}



0 0
原创粉丝点击