问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

求一蛇形矩阵的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

说清楚点
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
临沂比较有名的男装品牌 呼伦贝尔市悦动网络科技有限公司怎么样? 呼伦贝尔中汇实业有限公司怎么样? 呼伦贝尔油玉不绝电子商务有限公司怎么样? 如何避免wps卡顿? 属鼠的男人找对象是属什么,属鼠的人和什么属相合 96年鼠的姻缘在哪年 属相相合年份运势提升 2024属鼠找对象属什么最佳 黑客攻击网站能报案吗 黑客攻击报案有用吗 vs2010编译运行矩阵相乘不显示结果? vs2010编程时,临时矩阵用完后是不是马上要释放?为什么? 山西运城在四川隆昌的哪一方 从四川看山西吕梁地图上属于哪个方向 护理专业本科 ...6厘米的长方体在这个长方体的低面和四周涂上铁皮,要多少平方厘米的铁... 我住的是铁皮瓦,房子四周也是贴皮做的。为什么我的液晶电视机用的是3... QQ加好友我把他删了但是以前点赞的还有怎么样把他给拉黑了呢? 在qq我把对方删除并拉黑了,他在我空间留下的点赞痕迹还会永远存在吗 什么是分布式故障监测装置? 安防前景到底怎么样啊 dubug硬件监控灯 无网线大阳能4C监控如何和监控连接? 4c监控卡什么上 生姜有淡斑的作用吗 请问那里有卖电瓶车大功率充电器,我的车是72V35A的 请问我的水电瓶车是72V的没有充电器自动冲满的提示,请问应充多少时间为... ...用流量就可以,这是什么原因?我用的华硕路由器 球球英雄最强阵容攻略 打喷嚏是有人骂你还是想你(关于打喷嚏的说法怎么来的) 一厨两卫13升燃气热水器够用吗 燃气热水器13升和16升的差别有哪些? 湖北松下蓄电池哪家好? 应州牛腰有哪些常见的做法分享? 应州牛腰有什么简单的烹饪方法? 应州牛腰有什么好吃的做法? 应州牛腰的味道怎么样? 什么东西可以去除陶瓷上的顽固胶迹 谷雨节气的介绍 二十四节气之谷雨内容文字 猫和老鼠欢乐互动钻石特权要多少钱 充值性价比分析 猫和老鼠手游金色闪光头像怎么获得方法介绍 猫和老鼠说话时的框怎么获得? 不是头像框!!! 猫和老鼠手游头像框怎么获得 如何才能弄到头像框 济宁春凯龙制冷工程有限公司怎么样? 安卓手机有没有,触摸屏幕任何位置都可以截屏的软件后台自动运行的... 解封微信号时说,您操作过快,请稍后再试,稍后指多长时间啊? ...现在课也快上完了,想续费,教练说以后拿不迟,以后是多久啊... 天津高中部分区怎么查成绩 怎样查询高中的中考成绩? 如何查询高中成绩呢?