最近看到一道面试题要求打印螺旋状矩形,这是一道很普通的面试题,去网上找了一下,发现解决方案都是不断的用for循环,造成结构很复杂,所以我花了半个小时的时间重新写了一个
public class test {
public static void main(String[] args) {
//打印的矩阵高
int maxi = 5;
//要打印的矩阵宽
int maxj = 6;
int maxnum=maxi*maxj;
int i = 0;
int j = 0;
int[][] a = new int[maxi][maxj];
for (int k = 0; k < maxi; k++) {
for (int k2 = 0; k2 < maxj; k2++) {
a[k][k2] = 0;
}
}
String flag = "j";
int z = 1;
String flagi = "+";
String flagj = "+";
a[0][0]=z++;
while (!check(a)) {
if (flag.equals("j")) {
if (flagj.equals("+")) {
j++;
try {
if (a[i][j] != 0) {
flag = "i";
flagj = "-";
j--;
continue;
}
} catch (Exception e) {
flag = "i";
flagj = "-";
j--;
continue;
}
} else {
j--;
try {
if (a[i][j] != 0) {
flag = "i";
flagj = "+";
j++;
continue;
}
} catch (Exception e) {
flag = "i";
flagj = "+";
j++;
continue;
}
}
}
if (flag.equals("i")) {
if (flagi.equals("+")) {
i++;
try {
if (a[i][j] != 0) {
flag = "j";
flagi = "-";
i--;
continue;
}
} catch (Exception e) {
flag = "j";
flagi = "-";
i--;
continue;
}
} else {
i--;
try {
if (a[i][j] != 0) {
flag = "j";
flagi = "+";
i++;
continue;
}
} catch (Exception e) {
flag = "j";
flagi = "+";
i++;
continue;
}
}
}
a[i][j] = z++;
if (z > maxnum)
break;
}
for (int k = 0; k < a.length; k++) {
for (int k2 = 0; k2 < a[k].length; k2++) {
System.out.print(a[k][k2]+" ");
}
System.out.println();
}
}
//检查 矩阵是否还有项未填
public static boolean check(int[][] a) {
for (int k = 0; k < a.length; k++) {
for (int k2 = 0; k2 < a[k].length; k2++) {
if (a[k][k2] == 0)
return false;
}
}
return true;
}
}
分享到:
相关推荐
4. 打印螺旋矩阵。填充完成后,我们可以直接打印这个矩阵,观察螺旋路径。 对于顺时针螺旋矩阵的MATLAB实现,我们可以使用for循环来控制填充边界,并逐步改变边界。每次填充完一个边界后,通过循环变量的递增或递减...
用c语言编写的一个小代码,实现数据的螺旋输出,我也是个初学者,相互学习。
在给定的场景中,我们需要实现一个程序,能够根据用户输入的数字n生成一个n×n的螺旋矩阵,并打印出来。例如,当输入为3时,输出的矩阵是: ``` 1 8 7 2 9 6 3 4 5 ``` 在这个螺旋矩阵中,数字从1开始,按照顺时针...
1. `Command1_Click` 事件处理程序初始化了矩阵的大小,并调用 `spiral` 函数生成螺旋矩阵。 2. `spiral` 函数通过控制变量 `direction` 来决定当前应该向哪个方向移动并填充数字。每次完成一个方向的填充后,会更新...
在实现螺旋矩阵的VC6程序时,我们需要考虑以下几个关键点: 1. 初始化矩阵:创建一个二维数组,大小为n×n,所有元素初始值为0。 2. 编写填充函数:这个函数接收当前的起始位置(行和列),以及当前层的元素数量。...
- 当所有的位置都被正确填充后,使用嵌套循环遍历矩阵并将每个元素打印出来,形成最终的螺旋矩阵布局。 4. **示例运行:** - 假设用户输入了一个3x3的矩阵,那么程序会按照螺旋方式依次填入字符,最后输出的结果...
现在,让我们来构建一个C语言程序,以实现螺旋矩阵的生成和打印。我们选择7x7的矩阵作为示例,因为这个大小既不庞大也不微小,足够展示螺旋矩阵的特点,同时也便于理解和测试。 以下是构建螺旋矩阵的C语言代码: `...
Java编程实现打印螺旋矩阵实例代码是指使用Java语言编写的打印螺旋矩阵的程序代码。螺旋矩阵是指一个呈螺旋状的矩阵,它的数字由第一行开始到右边不断变大,向下变大,向左变大,向上变大,如此循环。 在这个代码中...
在`main`函数中,用户输入矩阵的大小,程序会生成并打印对应的螺旋矩阵。 通过这样的实现,我们可以看到在VC环境下,C++语言的强大功能可以轻松地处理这种问题。不仅能够理解螺旋矩阵的填充逻辑,还可以进一步扩展...
根据给定的信息,本文将详细解释C++螺旋矩阵的相关知识点,包括螺旋矩阵的概念、实现方法以及代码解析。 ### 一、螺旋矩阵的概念 ...通过上述分析可知,该程序能够有效地实现螺旋矩阵的填充与输出功能。
3. **输出结果**:使用两层嵌套循环遍历并打印生成的螺旋矩阵。 ### 总结 螺旋矩阵的生成不仅考验了对二维数组的理解,也涉及到了对循环结构的灵活运用。通过上述分析,我们可以看到C语言代码如何高效地实现了这一...
注意,这里的代码仅用于展示螺旋矩阵的打印,实际应用中可能需要修改以实现螺旋填充功能。 4. 文件结构解析: 在提供的文件名列表中,`.gitattributes`和`.gitignore`是Git版本控制系统中的配置文件,用于定义文件...
如果想进一步提升,可以尝试优化代码,比如使用更简洁的循环结构,或者将螺旋矩阵的生成和打印功能封装成独立的方法。同时,可以尝试解决一些变种问题,比如逆时针填充的螺旋矩阵,或者不规则大小的矩形螺旋矩阵。
螺旋矩阵,又称螺旋顺序矩阵,是一种特殊的二维数组排列方式,其特点是元素按顺时针...通过对数组的迭代和方向的控制,我们可以灵活地构建和打印螺旋矩阵。这种问题不仅锻炼了编程技巧,也提升了对二维数据结构的理解。
5. **输出展示**:最后,程序需要有将生成的螺旋矩阵展示给用户的功能。这可以通过打印数组或者以图形化的方式展示出来,如杨辉三角形。 杨辉三角形,又称为帕斯卡三角,是一个二维数组,其中每个数字是上面两行...
在`main`函数中,用户被要求输入矩阵的大小,然后调用`printSpiralMatrix`函数生成并打印螺旋矩阵。这个程序的运行结果是根据用户输入的矩阵大小创建并输出相应的螺旋矩阵。 在实际编程中,可能需要对输入进行错误...
顺时针打印矩阵,又称螺旋矩阵,是一种常见的编程题目,其主要特点是从外向里以顺时针方向打印矩阵中的所有数字。在PHP中实现顺时针打印矩阵需要对二维数组进行特定的遍历算法。在给定的文件信息中,提供了一段PHP...
4. **输出矩阵**:最后,使用双层`for`循环遍历整个二维数组`a`,打印出所有元素,形成完整的螺旋矩阵。 在程序中,注意`N/2`用于控制填充的层数,因为每层包含`2n+1`个元素(n为层数),所以总共有`(N+1)/2`层。...
本章主要讨论了数组元素的访问以及如何实现螺旋矩阵。数组元素的访问是通过索引来完成的,索引是从0开始的,因此访问数组中的元素通常使用下标语法`array[index]`。 在给定的代码片段中,有两个关键函数:`SetArray...
螺旋矩阵是一种特殊的矩阵排列方式,它将矩阵中的元素按照顺时针或逆时针的螺旋顺序填充。在VC++(Visual C++)中实现螺旋矩阵,可以锻炼编程者对数组操作的理解以及逻辑思维能力。本篇文章将深入探讨螺旋矩阵的概念...