java第三次作业
2013-03-26 09:48
423 查看
1.
本题要求你简单模拟这个过程:N个人排成一圈,从第一个人报数,凡是数到M的人就走出队列(出局),然后继续报数,请按照顺序输出出局的人的编号。
魏远阳提供 可通过老师网站编译:
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner cnn = new Scanner(System.in); int N = cnn.nextInt(); int M = cnn.nextInt(); int[] arrNum = new int ; int index = 0; int count = 0; int j = 0; int k = 0; for (int i = 0; i < N; i++) { arrNum[i] = i + 1; } while (count < N) { j++; index++; if (j <= N) { k = j - 1; } else { k = j % N - 1; if (k < 0) { k = k + N; } } if (arrNum[k] == 0) { index--; } else { if (index % M == 0) { count++; if (count != N) { System.out.print(arrNum[k] + " "); } else { System.out.println(arrNum[k]); } arrNum[k] = 0; } } } } }
本人做(供参考)未通过老师网站编译,但本地测试通过。
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sin = new Scanner(System.in); int N = sin.nextInt(); int M = sin.nextInt(); int[] persons = new int ; //定义退出标记 boolean[] flag = new boolean ; for (int i = 0; i < persons.length; i++) { persons[i] = i + 1; flag[i] = false; } int jump = 0; int index = 1; while (jump < N) { for (int i = 0; i < persons.length; i++) { if (!flag[i]) { if (index % M == 0) { jump++; flag[i] = true; System.out.print(persons[i] + " "); } index++; } } } } }
2.
编写一个程序,要求能够对一个NxN(N<10)的矩阵进行行列互换。每个矩阵的元素的取值为10~100的整数。
例如:
[95, 64, 85, 12]
[87, 43, 70, 23]
[87, 37, 26, 26]
[49, 95, 57, 21]
===>
[95, 87, 87, 49]
[64, 43, 37, 95]
[85, 70, 26, 57]
[12, 23, 26, 21]
import java.util.Arrays; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sin = new Scanner(System.in); int N = sin.nextInt(); int[][] nums = new int ; // 交换后的矩阵数组 int[][] swapNums = new int ; // 初始化输入矩阵 for (int i = 0; i < N; i++) { for (int j = 0; j < nums.length; j++) { nums[i][j] = sin.nextInt(); } } // 矩阵交换 for (int i = 0; i < N; i++) { for (int j = 0; j < nums.length; j++) { swapNums[j][i] = nums[i][j]; } } // 输出每行带有中括号的矩阵 for (int i = 0; i < N; i++) { System.out.println(Arrays.toString(swapNums[i])); } } }
3.
1填写在(3,2)(第三行第2列)的位置上;
2应当填写在其右下方格中,由于往下已经超出界限,因此变成位置(1,3);
3应该填写的位置往右往下都超出了界限,因此填入位置是(2,1);
4应放的位置被占了,因此放在3的上方位置(1,1);
5、6都按照规则放在其右下方格位置(2,2),(3,3);
7放在6的上方位置(2,3);
8因为右边越界,放在(3,1);
9放入(1,2);
4 9 2
3 5 7
8 1 6
类似的可以构造其它奇数阶的幻方。
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sin = new Scanner(System.in); int N = sin.nextInt(); int[][] nums = new int ; // 行坐标 int x = N; // 列坐标 int y = N / 2 + 1; nums[x - 1][y - 1] = 1; for (int i = 2; i <= N * N; i++) { // 设置当前坐标取右下角 x++; y++; // 临时坐标 int tmpX = x; int tmpY = y; if (x > N) { tmpX -= N; } if (y > N) { tmpY -= N; } // 判断应放的位置是否被占 if (nums[tmpX - 1][tmpY - 1] != 0) { // 确定上方坐标 x -= 2; y--; } else { x = tmpX; y = tmpY; } nums[x - 1][y - 1] = i; } // 输出 for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { System.out.print(nums[i][j]); // 控制最后逗号输出 if (j < N - 1) { System.out.print(","); } } System.out.println(); } } }