软件构造lab1(二)

Magic Squares

要求1

  • 从文件中读取数字

  • 检查列和对角线的总和是否也相同。

  • 返回指示输入是否为幻方的布尔结果。

  • 函数规约:boolean isLegalMagicSquare(String fileName)

  • 在 main()函数中调用五次 isLegalMagicSquare()函数,将 5 个文本
    文件名分别作为参数输入进去,看其是否得到正确的输出(true,
    false)。

  • 需要能够处理输入文件的各种特殊情况,例如:文件中的数据不符合Magic Square 的定义(行列数不相等、并非矩阵等)、矩阵中的某些数字并非正整数、数字之间并非使用\t 分割、等。若遇到这些情况,终止程序执行(isLegalMagicSquare 函数返回 false),并在控制台输出错
    误提示信息。

问题及解决方案
一开始遇到了不知道如何从文件中读取数字的问题,经过对split()函数的学习,学会了如何分割字符串,单独提取每一个数字。
判断是否为幻方,我们分步判断。先检查行列数是否相等,不相等显然不是幻方,其次再检查是否存在非正整数和符合,再来检查行列和是否相等

要求 2
阅读以下代码,将其加入你的 MagicSquare 类中作为一个静态函数,并试着
在 main()中测试它。


public static boolean generateMagicSquare(int n) {
	int magic[][] = new int[n][n];
	int row = 0, col = n / 2, i, j, square = n * n;
	for (i = 1; i <= square; i++) {
	magic[row][col] = i;//从中间开始填
	if (i % n == 0)
		row++;//填完一轮换下一行
	else {
		if (row == 0)
			row = n - 1;//填完一个数换上一行,第一行的上一行为最后一行
		else
			row--;
		if (col == (n - 1))
			col = 0;//填完一个数换下一列,最右的下一列是最左
		else
			col++;
		} 
	}
	for (i = 0; i < n; i++) {
		for (j = 0; j < n; j++)
			System.out.print(magic[i][j] + "\t");
		System.out.println();
	}
		return true;
}

Turtle Graphics

前面一些问题都比较简单,这里就不讲了。主要看凹包问题。
返回“ 形成凸包周长的顶点的输入点的最小子集。”

先选出点集中y坐标最小的点记为p0, 如果y坐标相同则相同点中x坐标最小的点。把各点按照极角从小到大排序,极角相同的点按照到的距离从小到大排序。遍历剩下的点,循环把发现不是凸包顶点的点移除出去。

个人艺术
随便写几个套循环的函数即可

Social Network

类似上学期算法课的图模型,建立有向图即可,这里就不多说了。

你可能感兴趣的:(软件构造lab1(二))