原创
三、程序设计题(不得改变已经给出的部分,允许添加新的辅助函数或类)(共36分)
(6分)1、以下函数的功能是判断一个正整数是否为质数,若是返回true,否则返回false。其中参数data为要判断的正整数。请给出其实现代码。
public boolean isPrime(int data)
{
}
1 class Main{ 2 3 public boolean isPrime(int data){ 4 if(data==1 || data==2){ 5 return true; 6 } 7 for(int i=2;i<=Math.sqrt(data);i++){ 8 if(data%i==0){ 9 return false; 10 } 11 } 12 return true; 13 } 14 } 15 16 public class Test { 17 18 public static void main(String[] args) { 19 Main test=new Main(); 20 for(int i=1;i<=20;i++){ 21 if(test.isPrime(i)==true){ 22 System.out.println(i+"是质数"); 23 }else{ 24 System.out.println(i+"是合数"); 25 } 26 } 27 } 28 29 }
(8分)2、以下函数的功能是判断一个整数数组是否有序(升序或降序,允许相等),若是有序的返回true,否则返回false。其中参数data为要判断的数组。请给出其实现代码。
public boolean isSorted(int[] data)
{
}
class Main{ public boolean isSorted(int[] data){ //有序返回true,否则返回false int flag=2; //0代表升序,1代表降序,2代表相等 for(int i=0;i<data.length-1;i++){ if(data[i]<data[i+1]){ //升序 if(flag==1){ //原来不能降序 return false; } flag=0; }else if(data[i]>data[i+1]){ //降序 if(flag==0){ //原来不能升序 return false; } flag=1; }else{ //相等 flag=2; } } return true; } } public class Test { public static void main(String[] args) { Main test=new Main(); int data[]={1,3,3,4,5,6,7,8,9}; if(test.isSorted(data)){ System.out.println("有序"); }else{ System.out.println("无序"); } } }
(10分)3、以下函数的功能是寻找一个矩阵中的所有“奇点”,即返回每一行的“奇点”所在列的坐标,若某行不存在“奇点”则返回-1。其中参数data为要判断的数组。所谓“奇点”是指该处的数值在它所处的行与列都是最大的。若每行存在多个“奇点”,仅取第一个(从左到右顺序)。假设矩阵中的数据如下所示,则返回数组值为{3, 1, -1}(左边),{1, 0, -1, 2}(右边)。
1 |
4 |
9 |
17 |
2 |
16 |
8 |
13 |
2 |
3 |
4 |
8 |
11 |
16 |
5 |
23 |
16 |
8 |
2 |
9 |
4 |
4 |
8 |
12 |
public int[] singularity (int[][] data)
{
}
1 class Main{ 2 3 public int[] singularity (int[][] data){ 4 int res[]=new int[data.length]; 5 for(int i=0;i<res.length;i++){ 6 res[i]=-1; 7 } 8 for(int i=0;i<data.length;i++){ 9 for(int j=0;j<data[0].length;j++){ 10 int flag1=1; 11 int flag2=1; 12 int max=data[i][j]; 13 for(int rank=0;rank<data[0].length;rank++){ //判断行最大 14 if(data[i][rank]>data[i][j]){ 15 flag1=0; 16 } 17 } 18 for(int row=0;row<data.length;row++){ //判断列最大 19 if(data[row][j]>data[i][j]){ 20 flag2=0; 21 } 22 } 23 if(flag1==1 && flag2==1){ //奇点 24 res[i]=j; 25 break; 26 } 27 } 28 } 29 return res; 30 } 31 } 32 33 public class Test { 34 35 public static void main(String[] args) { 36 Scanner reader=new Scanner(System.in); 37 Main test=new Main(); 38 int data[][]=new int[4][3]; 39 for(int i=0;i<data.length;i++){ 40 for(int j=0;j<data[0].length;j++){ 41 data[i][j]=reader.nextInt(); 42 } 43 } 44 int input[]=test.singularity(data); 45 for(int i=0;i<input.length;i++){ 46 System.out.print(input[i]+" "); 47 } 48 } 49 50 }
(12分)4、以下函数的功能是判断矩阵中的两个不同且不在边界上的点是否匹配,若匹配则返回true,否则返回false。其中,其中参数data为要判断的数组,i1与j1表示第一点的下标(从0开始计数),i2与j2表示第二点的下标。两个点匹配应同时满足如下条件:①两个点所赋予的值相同,且不等于0;②能够找到一条折线(最多包含三条水平或垂直的线段)将它们连接起来,而且这条折线所经过的点所赋予的值全部为0。假设矩阵中的数据如下所示,则点[1, 3]与[4, 2]是匹配的,点[1, 3]与[2, 2]是匹配的,而点[1, 4]与[3, 4]是不匹配的,点[3, 1]与[3, 4]也是不匹配的。
0 |
1 |
0 |
2 |
0 |
3 |
0 |
0 |
0 |
2 |
3 |
4 |
0 |
1 |
2 |
4 |
1 |
0 |
0 |
3 |
4 |
0 |
3 |
1 |
0 |
0 |
2 |
0 |
3 |
0 |
public boolean isMatch (int[][] data, int i1, int j1, int i2, int j2)
{
}