输入一个n,在屏幕上打印出N*N的矩阵(华为面试题)

题目:输入一个n,在屏幕上打印出N*N的矩阵。

例如:输入一个3,则输出:
1 2 3
8 9 4
7 6 5
输入一个4,刚输出:
 1  2  3  4
12 13 14  5
11 16 15  6
10  9  8  7

答案:

#include<stdio.h>
#include<conio.h>
#define N 10
void printCube(int a[][N],int n);//数组存放矩阵结点的值
void main()
{
 int a[N][N],n;
 printf("input n:\n");       //输入矩阵的行、列数
 scanf("%d",&n);
 printCube(a,n);             //执行赋值和打印函数
 getch();
}
void printCube(int a[][N],int n)//数组存放矩阵结点的值
{
 int i,j,round=1;
 int m=1;                    //初始值为1
 for(i=0;i<n;i++)
  a[0][i]=m++;            //赋值第一行
 for(i=n-1;i>=n/2;i--)       //几次循环,得到矩阵数组的所有值
 {
  for(j=round;j<=i;j++)
   a[j][i]=m++;        //赋值最后一列
  for(j=i;j>=round;j--)
   a[i][j-1]=m++;      //赋值最后一行
  for(j=i;j>round;j--)
   a[j-1][round-1]=m++;//赋值第一列
  for(j=round;j<i;j++)
   a[round][j]=m++;    //赋值里面的第一行,即第二行
  round++;                //倒数第二列,重新运算,round+1时,减少一列,因为最后一列已经赋值
 }                           //循环得到矩阵数组的值
 for(i=0;i<n;i++)            //循环输入矩阵
 { for(j=0;j<n;j++)
   printf("%3d",a[i][j]);//打印一行
  printf("\n");             //换行
 }
}

程序执行结果:

要编写这样一个Java测试程序,首先需要创建一个能够接受用户输入矩阵,并且包含逻辑来判断是否存在四个连续相同的数字。程序的大致步骤如下: 1. 提示用户输入矩阵的大小n,确保n>=6。 2. 根据n的值创建一个n*n的二维数组,并接受用户输入填充该矩阵。 3. 实现逻辑判断矩阵中是否存在连续四个相同的数字。 下面是一个简单的实现示例: ```java import java.util.Scanner; public class MatrixFourInARowChecker { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("请输入矩阵大小n(n>=6):"); int n = scanner.nextInt(); if (n < 6) { System.out.println("矩阵大小不满足要求,请重新运行程序。"); return; } int[][] matrix = new int[n][n]; System.out.println("请输入矩阵中的每个值(共 " + n * n + " 个值):"); for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { matrix[i][j] = scanner.nextInt(); } } boolean result = checkFourInARow(matrix); System.out.println(result ? "存在四个连续的数字相同" : "不存在四个连续的数字相同"); scanner.close(); } private static boolean checkFourInARow(int[][] matrix) { for (int i = 0; i < matrix.length; i++) { for (int j = 0; j < matrix[i].length; j++) { // 检查横向、纵向、两个对角线方向 if (checkDirection(matrix, i, j, 1, 0) || // 横向 checkDirection(matrix, i, j, 0, 1) || // 纵向 checkDirection(matrix, i, j, 1, 1) || // 对角线 checkDirection(matrix, i, j, 1, -1)) { // 反对角线 return true; } } } return false; } private static boolean checkDirection(int[][] matrix, int row, int col, int dRow, int dCol) { int count = 1; int value = matrix[row][col]; int r, c; // 向一个方向检查 r = row + dRow; c = col + dCol; while (r >= 0 && r < matrix.length && c >= 0 && c < matrix.length && matrix[r][c] == value) { count++; r += dRow; c += dCol; } // 向相反方向检查 r = row - dRow; c = col - dCol; while (r >= 0 && r < matrix.length && c >= 0 && c < matrix.length && matrix[r][c] == value) { count++; r -= dRow; c -= dCol; } return count >= 4; } } ``` 以上程序会首先检查用户输入的n是否满足最小条件,然后根据用户输入构建矩阵,并调用`checkFourInARow`方法来判断矩阵中是否存在四个连续的相同数字。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值