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

如何使用C# 语言实现螺旋加上蛇形的矩阵动态生成?当n=4时,矩阵如此

发布网友 发布时间:2022-04-29 05:34

我来回答

2个回答

热心网友 时间:2023-10-12 23:43

哎,好久没弄算法了搞了挺久才算给弄出来了,未经优化代码如下:
int n = 4;
int t = n;
int max=n*n;
int row = 0, col = 0;
int m = (max - n) / 2 + n;//螺旋的最大值
int[,] result = new int[t,t];
bool flag = true;//对角标志
for (int i = 1; i <= m; i++) {//螺旋部分
if ((flag && result[row,col < n ? col : n - 1] == 0)) {//横向螺旋
result[row,col] = i;
col++;
continue;
}
if (flag && (result[row < n - 1 ? row + 1 : n - 1,col - 1] == 0)) {//纵向螺旋
row++;
result[row,col - 1] = i;
continue;
}
//对角斜向上
if (flag)
col--;
flag = false;
col--;
row--;
result[row,col] = i;
if (result[row - 1 < 0 ? 0 : row - 1,col - 1 < 0 ? 0 : col - 1] == 0) {//斜对角数未填充
continue;
} else {
if (result[row,col + 1] != 0) {
continue;
} else {
col++;
flag = true;
}
}
}
row = 1;
col = 0;
n = t;
flag = true;
for (int i = m + 1; i <= max; i++) {//蛇形部分
if (flag && result[row >= n ? n - 1 : row,col >= n - 2 ? n - 2 : col] == 0) {//斜向下对角
result[row,col] = i;
row++;
col++;
continue;
}
//斜向上对角
if (flag) {
col--;
}
flag = false;
row--;
col--;
if (col >= 0)
result[row,col] = i;
else {//到达最左边,折返
row = row + 2;
col++;
flag = true;
i--;
}

}
//输出结果
int r = 0;
String temp = " ";
for (int j = 0; j < t; j++) {
for (int k = 0; k < t; k++) {
temp = " ";
r = result[j,k];
if (r < 10)
temp += " ";
Console.Write(r + temp);
}
Console.WriteLine();
}
Console.WriteLine("按任意键退出");
Console.ReadLine();

热心网友 时间:2023-10-12 23:43

哎,好久没弄算法了搞了挺久才算给弄出来了,未经优化代码如下:
int n = 4;
int t = n;
int max=n*n;
int row = 0, col = 0;
int m = (max - n) / 2 + n;//螺旋的最大值
int[,] result = new int[t,t];
bool flag = true;//对角标志
for (int i = 1; i <= m; i++) {//螺旋部分
if ((flag && result[row,col < n ? col : n - 1] == 0)) {//横向螺旋
result[row,col] = i;
col++;
continue;
}
if (flag && (result[row < n - 1 ? row + 1 : n - 1,col - 1] == 0)) {//纵向螺旋
row++;
result[row,col - 1] = i;
continue;
}
//对角斜向上
if (flag)
col--;
flag = false;
col--;
row--;
result[row,col] = i;
if (result[row - 1 < 0 ? 0 : row - 1,col - 1 < 0 ? 0 : col - 1] == 0) {//斜对角数未填充
continue;
} else {
if (result[row,col + 1] != 0) {
continue;
} else {
col++;
flag = true;
}
}
}
row = 1;
col = 0;
n = t;
flag = true;
for (int i = m + 1; i <= max; i++) {//蛇形部分
if (flag && result[row >= n ? n - 1 : row,col >= n - 2 ? n - 2 : col] == 0) {//斜向下对角
result[row,col] = i;
row++;
col++;
continue;
}
//斜向上对角
if (flag) {
col--;
}
flag = false;
row--;
col--;
if (col >= 0)
result[row,col] = i;
else {//到达最左边,折返
row = row + 2;
col++;
flag = true;
i--;
}

}
//输出结果
int r = 0;
String temp = " ";
for (int j = 0; j < t; j++) {
for (int k = 0; k < t; k++) {
temp = " ";
r = result[j,k];
if (r < 10)
temp += " ";
Console.Write(r + temp);
}
Console.WriteLine();
}
Console.WriteLine("按任意键退出");
Console.ReadLine();

热心网友 时间:2023-10-12 23:44

没明白说什么追问抱歉,请再看一下,谢谢!

热心网友 时间:2023-10-12 23:44

没明白说什么追问抱歉,请再看一下,谢谢!

热心网友 时间:2023-10-12 23:43

哎,好久没弄算法了搞了挺久才算给弄出来了,未经优化代码如下:
int n = 4;
int t = n;
int max=n*n;
int row = 0, col = 0;
int m = (max - n) / 2 + n;//螺旋的最大值
int[,] result = new int[t,t];
bool flag = true;//对角标志
for (int i = 1; i <= m; i++) {//螺旋部分
if ((flag && result[row,col < n ? col : n - 1] == 0)) {//横向螺旋
result[row,col] = i;
col++;
continue;
}
if (flag && (result[row < n - 1 ? row + 1 : n - 1,col - 1] == 0)) {//纵向螺旋
row++;
result[row,col - 1] = i;
continue;
}
//对角斜向上
if (flag)
col--;
flag = false;
col--;
row--;
result[row,col] = i;
if (result[row - 1 < 0 ? 0 : row - 1,col - 1 < 0 ? 0 : col - 1] == 0) {//斜对角数未填充
continue;
} else {
if (result[row,col + 1] != 0) {
continue;
} else {
col++;
flag = true;
}
}
}
row = 1;
col = 0;
n = t;
flag = true;
for (int i = m + 1; i <= max; i++) {//蛇形部分
if (flag && result[row >= n ? n - 1 : row,col >= n - 2 ? n - 2 : col] == 0) {//斜向下对角
result[row,col] = i;
row++;
col++;
continue;
}
//斜向上对角
if (flag) {
col--;
}
flag = false;
row--;
col--;
if (col >= 0)
result[row,col] = i;
else {//到达最左边,折返
row = row + 2;
col++;
flag = true;
i--;
}

}
//输出结果
int r = 0;
String temp = " ";
for (int j = 0; j < t; j++) {
for (int k = 0; k < t; k++) {
temp = " ";
r = result[j,k];
if (r < 10)
temp += " ";
Console.Write(r + temp);
}
Console.WriteLine();
}
Console.WriteLine("按任意键退出");
Console.ReadLine();

热心网友 时间:2023-10-12 23:44

没明白说什么追问抱歉,请再看一下,谢谢!

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
爱普生ME100不能打印 想去锦州西餐厅吃饭,环境好能拍照的,我主要是想拍照。。。食物很精致... Ipad Air连接电脑后itunes不显示设备 SuperJunior-it's you歌词 super junior lt's you的歌词翻译成中文? ...没钱,出来26了,究竟该不该去当兵?退役以后找工作 高中毕业生去入伍了没有考大学,请问退伍还可以继续升学历吗?有什么途径... 什么是免漆家具? 家里用免漆板打家具需多长时间好住进去 脐带血干细胞移植介绍 查找iphone为啥icolid不运行 好玩的解谜游戏有哪些,求大神解答 有什么好玩的手机解密游戏,分享一下 公司因员工打了卡偷偷回宿舍睡觉而辞退合法吗? 楼主直播的解谜游戏有哪些 劳动者在上班时间违反公司规定(比如:打瞌睡)被辞退有补偿吗? 带剧情的单机解谜游戏 保安工作岗打瞌睡被辞退有补偿吗? 有没有好玩的冒险解谜游戏?推荐几个经典的 公司以经常上班睡觉迟到,开除员工,应该要怎么赔偿! 解谜冒险单机游戏,你玩过哪几个? 员工上班睡觉,公司要辞退他吗? 企业员工手册规定员工在岗睡觉可以解雇不付补偿金可以吗? 十大最好玩的解谜游戏 我请问一下法律的问题!在公司上班晚上打瞌睡被领导抓住了两、三次了!如果被解雇有赔偿吗? 怎样设置word打开的时候输入的汉字字体是宋体,英文是Times&nbsp;New&nbsp;Roman? 正式工睡觉被公司辞退是不是可以找公司要经济补偿金 15个画风唯美的解谜游戏有什么? 上班睡觉,玩手机被辞退了能拿到赔偿吗,我不想做了,动不动就罚钱,请问给他辞退能拿到赔偿金吗 在试用期 因上班睡觉公司要开除我 是否能待到补偿 矩阵乘法代码…… 别人能凭我的手机号通过移动公司查到我的身份证资料吗- 问一问 col这个符号什么意思!!! 跪求一个单机版五子棋怎么设计和实现,最好是C语言版的 看看我用C++写的矩阵乘法错哪了 C++五子棋判定输赢,横线、竖线、左斜线、友斜线,以上四种判定,以及流程图。 C语言 求解 二维数组的回形遍历 二维数组右上左下遍历 提示wrong answer ,不知道哪错了,跪求解答 数据结构中,哨兵 的名字是为什么而来的呢 c++输出螺旋方阵,大神指导一下,我的哪里错了。。。急!! 在poi 中OPCPackage.open() 是什么函数?OPCPackage这个类用来干嘛... c++中,二维数组中第i行第j列的元素,对应到一维数组中其下标是?我是菜鸟啊,麻烦各位了,谢谢 虎皮鹦鹉幼崽吃什么 三四个月大的虎皮鹦鹉喜欢吃什么? 刚出壳的虎皮鹦鹉吃什么? 三四个月的黄云斑虎皮鹦鹉喜欢吃什么? 为什么冬天洗澡的时候洗了两遍头发,可是头发干了之后会有好多头皮屑 刚刚出生的小虎皮鹦鹉吃什么呀,应注意些什么 送给老人什么礼物合适? 虎皮鹦鹉刚出生的幼鸟吃什么