求一蛇形矩阵的c++源程序
发布网友
发布时间:2024-09-17 00:35
我来回答
共6个回答
热心网友
时间:2024-11-24 03:31
我空间上就有一个啊,给你看看吧
#include <iostream.h>
#include <iomanip.h>
/*
Array 要填充的数组
dir 数据递增方向,以从右上方到左下方为正方向,反之为负方向
index 下标 x+y 的值,顺便说下,x表示行,y表示列
start 该行起始数字
len 该行总共几个数字
line 第几行
NUM 方阵的阶次,即行值或列值
*/
void fill(int **Array,bool dir,int index,int start,int len,int line,const int NUM)
{
int x;//起始x
int y;//起始y
if(dir)
{
if(line<=NUM)
{
y=line-1;
x=index-y;
}
else
{
x=line-NUM;
y=index-x;
}
while(len)
{
Array[x++][y--]=start++;
len--;
}
}
else
{
if(line<=NUM)
{
x=line-1;
y=index-x;
}
else
{
y=line-NUM;
x=index-y;
}
while(len)
{
Array[x--][y++]=start++;
len--;
}
}
}
void output(int **a,int NUM)
{
for(int i=0;i<NUM;i++)
{
for(int j=0;j<NUM;j++)
{
cout<<setw(3)<<a[i][j];
}
cout<<endl;
}
}
void main()
{
int **Ar,x;
cin>>x;
Ar=new int *[x];
for(int i=0;i<x;i++)
Ar[i]=new int[x];
bool dir=true;
int startnum=1;
int len=1,maxlen=x;
int line=1,maxline=2*x-1;
for(line=1;line<=maxline;line++)
{
fill(Ar,dir,line-1,startnum,len,line,x);
//以下是修改变量
dir=!dir;//方向
startnum+=len;//起始数字
if(line+1<=x)//下一行的数字
len=line+1;
else
len=2*x-line-1;
}
output(Ar,x);
}
#include <iostream.h>
#include <iomanip.h>
/*
Array 要填充的数组
dir 数据递增方向,以从右上方到左下方为正方向,反之为负方向
index 下标 x+y 的值,顺便说下,x表示行,y表示列
start 该行起始数字
len 该行总共几个数字
line 第几行
NUM 方阵的阶次,即行值或列值
*/
void fill(int **Array,bool dir,int index,int start,int len,int line,const int NUM)
{
int x;//起始x
int y;//起始y
if(dir)
{
if(line<=NUM)
{
y=line-1;
x=index-y;
}
else
{
x=line-NUM;
y=index-x;
}
while(len)
{
Array[x++][y--]=start++;
len--;
}
}
else
{
if(line<=NUM)
{
x=line-1;
y=index-x;
}
else
{
y=line-NUM;
x=index-y;
}
while(len)
{
Array[x--][y++]=start++;
len--;
}
}
}
void output(int **a,int NUM)
{
for(int i=0;i<NUM;i++)
{
for(int j=0;j<NUM;j++)
{
cout<<setw(3)<<a[i][j];
}
cout<<endl;
}
}
void main()
{
int **Ar,x;
cin>>x;
Ar=new int *[x];
for(int i=0;i<x;i++)
Ar[i]=new int[x];
bool dir=true;
int startnum=1;
int len=1,maxlen=x;
int line=1,maxline=2*x-1;
for(line=1;line<=maxline;line++)
{
fill(Ar,dir,line-1,startnum,len,line,x);
//以下是修改变量
dir=!dir;//方向
startnum+=len;//起始数字
if(line+1<=x)//下一行的数字
len=line+1;
else
len=2*x-line-1;
}
output(Ar,x);
}
输出结果:
9
1 3 4 10 11 21 22 36 37
2 5 9 12 20 23 35 38 53
6 8 13 19 24 34 39 52 54
7 14 18 25 33 40 51 55 66
15 17 26 32 41 50 56 65 67
16 27 31 42 49 57 64 68 75
28 30 43 48 58 63 69 74 76
29 44 47 59 62 70 73 77 80
45 46 60 61 71 72 78 79 81
热心网友
时间:2024-11-24 03:31
#include <iostream>
using namespace std;
int main()
{
int **array;
int i, j, k, n, x = 1, y = -1, flag = 0;
cin >> n;
array = new int*[n];
for(i = 0; i < n; i++)
array[i] = new int[n];
for(i = 0, j = 0, k = 0; i < n * n; i++)
{
if(j < 0)
{
j = 0;
flag = 1;
x = 1;
y = -1;
}
else if(j >= n)
{
if(k < 0)
k = 1;
else
k += 2;
j = n - 1;
y = 1;
x = -1;
}
if(k < 0)
{
k = 0;
x = -1;
y = 1;
}
else if(k >= n)
{
if(flag)
j++;
else
j += 2;
k = n - 1;
x = 1;
y = -1;
}
array[j][k] = i + 1;
j += x; //选择行缩进方式
k += y; //选择列缩进方式
flag = 0;
}
for(j = 0; j < n; j++)
{
for(k = 0; k < n; k++)
cout << array[j][k] << '\t';
cout << endl;
}
return 0;
}
热心网友
时间:2024-11-24 03:32
由于着急,也没想出什么太好的方法,估计是比较苯的方法,呵呵。不过结果是没问题的。编译环境VS2005。
#include <iostream>
#include <stdio.h>
using namespace std;
int juei(int a)
{
if(a<0) a=-a;
return a;
}
int main()
{
int num;
int d[100][100];
int x,y,i,j,r,flag,f1,f2;
cin>>num;
x=0;
y=0;
i=0;
j=0;
r=0;
flag=1;
while(i<(2*num-1))
{
j=0;
while(j<(num-juei(num-i-1)))
{
d[x][y]=r+1;
if(flag<0)
{
f1=x;
f2=y;
x++;
y--;
if(y<0) y=0;
if(x>=num)
{
x--;
y++;
if((f1==x)&&(f2==y)) y++;
}
}
else
{
f1=x;
f2=y;
x--;
y++;
if(x<0) x=0;
if(y>=num)
{
y--;
x++;
if((f1==x)&&(f2==y))x++;
}
}
j++;
r++;
}
flag=-flag;
i++;
}
for(i=0;i<num;i++)
{
for(j=0;j<num;j++)
{
cout<<d[i][j]<<"\t";
}
cout<<endl;
}
system("pause");
return 0;
}
热心网友
时间:2024-11-24 03:32
给,已经运行确认了:
#include<iostream>
#include<iomanip>
using namespace std;
int a[20][20];
void fill(int begin,int number,int size)
{
if(size==0)
return;
if(size==1)
{
a[begin][begin]=number;
return;
}
int i,h=begin,r=begin;
a[r][h]=number;
number++;
for(i=0;i<size-1;i++)
{
r++;
a[r][h]=number;
number++;
}
for(i=0;i<size-1;i++)
{
h++;
a[r][h]=number;
number++;
}
for(i=0;i<size-1;i++)
{
r--;
a[r][h]=number;
number++;
}
for(i=0;i<size-2;i++)
{
h--;
a[r][h]=number;
number++;
}
fill(h,number,size-2);
}
int main()
{
int n,h,r;
cin>>n;
fill(0,1,n);
for(r=0;r<n;r++)
{
for(h=0;h<n;h++)
{
cout<<setw(4)<<a[r][h];
}
cout<<endl;
}
return 0;
}
运行结果:
4
1 12 11 10
2 13 16 9
3 14 15 8
4 5 6 7
Press any key to continue
5
1 16 15 14 13
2 17 24 23 12
3 18 25 22 11
4 19 20 21 10
5 6 7 8 9
Press any key to continue
热心网友
时间:2024-11-24 03:33
别急,自己想,有规律的
热心网友
时间:2024-11-24 03:34
说清楚点