6-1 方法:求n和m之间的所有素数的和
public static int fun(int m, int n) {
int flag=0,sum=0;
for(int j=n;j<=m;j++){
boolean isPrime = true;
for(int i=2;i<j;i++){
if(j%i == 0){
isPrime = false;
}
}
if(isPrime){
sum+=j;
flag++;
}}
return sum;
}
6-2 递归方法:汉诺塔问题
public static int hano(int n){
int cnt = 2,ans = 1;
if(n ==1) return 1;
else return 2*hano(n-1)+1;
}
6-3 方法重载 (10 分)
编写重载方法fun,分别完成两个数值相加和两个字符串相加的功能,字符串相加的结果是该两个字符串按顺序连接形成的新的字符串。
private static String fun(String a, String b) {
return a+b;
}
private static double fun(Double a, Double b) {
return a+b;
}
6-4 方法:引用变量做形参
private static void fun(int[] arr) {
for (int x=0; x<arr.length-1; x++){
for (int y=0; y<arr.length-1-x ;y++){
if (arr[y]<arr[y+1]){
int temp = arr[y];
arr[y] = arr[y+1];
arr[y+1] = temp;
}}}}
5-1
下面的main方法实例化一个Person类的对象,从键盘输入Person的name和age,然后调用Person对象的print方法输出Person信息。请补全代码。 import java.util.*;
class Person{
Person p=new Person;
p.name="张三”;
p.age="20";
5-2
从键盘输入学生信息,然后输出该信息。空白处补充程序。
s1.setAge(sc.nextInt());
6-1 定义类 (10 分)
定义一个Student类,包含int sno,String name,int age三个成员变量,包含三个成员变量的setter和getter方法。(只提交类的定义)
裁判测试程序样例:
class Student{
int sno,age;
String name;
public int getSno() {
return sno;
}
public void setSno(int sno) {
this.sno = sno;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
7-1 求二维数组的鞍点 (10 分)
一个二维数组中,如果一个元素是其所在行的最大值,是其所在列的最小值,则称这个元素为鞍点。求一个二维数组中的所有鞍点。
输入格式:
import java.util.*;
public class Main{
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int a=in.nextInt();
int b=in.nextInt();
int sum=0;
int [][]c=new int [a][b];
int [] d=new int [a];
int [] e=new int [b];
for(int i=0;i<c.length;i++){
for(int j=0;j<c[i].length;j++){
c[i][j]=in.nextInt();
}
}
for(int i=0;i<a;i++)
{
d[i]=c[i][0];
for(int j=1;j<b;j++)
{
if(c[i][j]>d[i])
d[i]=c[i][j];
}
}
for(int j=0;j<b;j++)
{
e[j]=c[0][j];
for(int i=1;i<a;i++)
{
if(c[i][j]<e[j])
e[j]=c[i][j];
}
}
for(int i=0;i<a;i++)
{
for(int j=0;j<b;j++)
{
if(c[i][j]==d[i]&&c[i][j]==e[j])
{
System.out.print(i+" "+j);
sum++;
}
}
}
if(sum==0) {System.out.print("0");}
}
}
7-2 数字螺旋方阵 (10 分)
输入一个整数n,输出n阶数字螺旋方阵。
输入格式:
输入一个整数n表示方阵的阶,每一个数字占用4个字符位置,
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n =in.nextInt();
int[][] m= new int [n][n];
int right = 1, down = 2, left = 3, top = 4;
int direction = right;
int i = 0, j = 0;
for(int p=1; p<=n*n; p++){
m[i][j] = p;
if(direction == right){
if(j + 1 < n && m[i][j+1] == 0){
j++;
}else{
i++;
direction = down;
continue;
}
}
if(direction == down)
{
if(i+1<n && m[i+1][j] == 0)
{
i++;
}else{
j--;
direction = left;
continue;
}
}
if(direction == left)
{
if(j-1 >= 0 && m[i][j-1] == 0)
{
j--;
}else{
i--;
direction = top;
continue;
}
}
if(direction == top)
{
if(i-1 >= 0 && m[i-1][j] == 0){
i--;
}else{
j++;
direction = right;
continue;
}
}
}
for(int x = 0; x < n; x ++){
for(int y = 0; y < n; y ++){
if(y<(n-1)){
System.out.printf("%-4d",m[x][y]);
}else{
System.out.printf("%-4d",m[x][y]);
System.out.println();
}
}
}
}}
7-3 九宫格的生成 (10 分)
输入奇数n,形成n*n阶方阵。要求在这个方阵中填入1到n的平方的数,使得方阵的每行的和、每列的和及两条对角线的和都相等。
import java.util.Scanner;
public class Main {
public static void main(String[] args){
boolean mark = true;
Scanner in = new Scanner(System.in);
int n= in.nextInt();
while (mark)
{
if (n % 2 == 0 || n < 0){
n = in.nextInt();
}
else{
mark = false;
}
}
int[][] arr = new int[n][n];
int a = 0, b = n / 2;
for (int i = 1; i <= n*n; i++){
arr[a][b] = i;
a--;
b++;
if (a < 0 && b >= n){
a += 2;
b--;
}
else if (a < 0){
a = n - 1;
}
else if (b >= n){
b = 0;
}
else if (arr[a][b] != 0){
a += 2;
b--;
}
}
for (int[] c : arr){
for (int d : c){
System.out.printf("%-4d",d);
}
System.out.println();
}
}}
7-1 数组插入元素 (10 分)
在一个非降序数组中插入一个元素,使得数组保持非降序状态。
输入格式:
输入一个n,接着输入n个非降序整数,最后输入要插入的整数。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int a=sc.nextInt();
int[] b=new int[a];
for(int i=0;i<b.length;i++){
b[i]=sc.nextInt();
}
int number=sc.nextInt();
int i;
int []c=new int[a+1];
int index=c.length-1;
for(i=0;i<b.length;i++){
if(b[i]>number){
index=i;
break;
}
}
for(i=a;i>index;i--){
c[i]=b[i-1];
}
for(i=0;i<index;i++){
c[i]=b[i];
}
c[index]=number;
for(i=0;i<a;i++){
System.out.print(c[i]+" ");
}System.out.print(c[a]);
}
}
7-2 数组中的最大最小值 (10 分)
求一个整数数组中的最大值、最小值及其下标。
输入格式:
输入整数n,表示数组的长度。接着输入n个整数存入数组
输出格式:
输出最大值下标及最大值,最小值下标及最小值,以空格分隔。 如果有两个最大值或最小值相同,则输出下标小的那个。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int a=in.nextInt();
int [] b=new int [a];
for(int i=0;i<b.length;i++)
{
b[i]=in.nextInt();
}
int max=b[0];
int min=b[0];
int m=0,n=0;
for(int i=1;i<b.length;i++)
{
if(max<b[i])
{ max=b[i];m=i;}
else { m=m;}
}
for(int i=1;i<b.length;i++)
{
if(min>b[i])
{ min=b[i];n=i;}
else { n=n;}
}
System.out.print(m+" "+max+" "+n+" "+min);
}
}
7-3 数组去除元素 (10 分)
在一个一维数组中去除一个元素
输入格式:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int a=in.nextInt();
int [] b =new int [a];
int outdex=b.length -1;
int sum=0;
for(int i=0;i<b.length;i++) {
b[i]=in.nextInt();
}
int c=in.nextInt();
int [] d=new int [a-1];
for(int i=0;i<b.length;i++) {
if(b[i]==c) { outdex=i; sum=1;break;}
}
for(int i=0;i<outdex;i++) {
d[i]=b[i];
}
for(int i=outdex+1;i<b.length;i++) {
d[i-1]=b[i];
}
if(sum==1) {
for(int i=0;i<d.length;i++) {
System.out.print(d[i]+" ");
}}
else {for(int i=0;i<b.length;i++) {
System.out.print(b[i]+" ");
}}
}}
7-1 数组创建 (10 分)
键盘输入一个n,创建长度为n的整型数组,输入n个整数存入数组,然后输出数组。
import java.util.Scanner;
public class Main{
public static void main(String[] args)
{
Scanner cin=new Scanner(System.in);
int n=cin.nextInt();
int[] a;
a=new int[n];
for(int i=0;i<a.length;i++)
{
a[i]=cin.nextInt();
}
for(int i=0;i<a.length-1;i++)
{
System.out.print(a[i]+",");
}
System.out.print(a[n-1]);
}
}
7-2 数组逆序输出
import java.util.Scanner;
public class Main {
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
int a=sc.nextInt();
int[] b=new int [a];
for(int j=0;j<a;j++)
{
b[j]=sc.nextInt();
}
for(int j=a-1;j>=0;j--)
{
System.out.print(b[j]);
System.out.print(' ');
}
}
}
7-3 判断是否有重复数据 (10 分)
键盘输入n个整数,判断这n个整数中是否有重复数据。若有重复数据,输出“yes”;否则输出“no”。
import java.util.Scanner;
public class Main {
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
int a=sc.nextInt();
int[] b=new int [a];
int[] c=new int[b.length];
int i,j;
int sum=0;
for(j=0;j<a;j++)
{
b[j]=sc.nextInt();
}
for(i=0;i<a;i++)
{
c[i]=b[i];
}
for(i=0;i<a-1;i++){
for(j=i+1;j<a;j++){
if(b[i]==c[j]) sum++;
}}
if(sum==0) System.out.println("no");
else System.out.println("yes");
}
}
7-1 约瑟夫环问题 (10 分)
n个小孩围成一圈,从第一个小孩开始从1到m报数,报到m的小孩出列,下一个小孩继续从1开始报数(出列的小孩不参与报数)。问小孩的出列顺序。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n,m,i,k,o;
n=in.nextInt();
m=in.nextInt();
int[] a=new int[n];
i=0;k=1;o=1;
while(o<=n){
if(a[i]==0){
if(k==m){
a[i]=o++;
k=0;
}
k++;
}
i++;
if(i==n) i=0;
}
for(int j=0;j<n-1;j++){
System.out.print(a[j]+",");
}
System.out.print(a[n-1]);
}
}
7-2 数组去重 (10 分)
输入n,再输入n个数,将其中重复出现的元素删除掉,最后输出结果
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in =new Scanner(System.in);
int n =in.nextInt();
int []a=new int[n+1];
for (int i=0;i<n;i++){
a[i] = in.nextInt();
}
for(int i=0;i<n;i++)
{
for(int j=i+1;j<n;j++)
{
if(a[i]==a[j])
{
for(int temp = j;temp<n;temp++)
a[temp]=a[temp+1];
j--;
n--;
}
}
}
for (int i=0;i<n;i++)
{
System.out.print(a[i]+" ");
}
}}
7-1 求二维数组的鞍点 (10 分)
一个二维数组中,如果一个元素是其所在行的最大值,是其所在列的最小值,则称这个元素为鞍点。求一个二维数组中的所有鞍点。
import java.util.*;
public class Main{
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int a=in.nextInt();
int b=in.nextInt();
int sum=0;
int [][]c=new int [a][b];
int [] d=new int [a];
int [] e=new int [b];
for(int i=0;i<c.length;i++){
for(int j=0;j<c[i].length;j++){
c[i][j]=in.nextInt();
}
}
for(int i=0;i<a;i++)
{
d[i]=c[i][0];
for(int j=1;j<b;j++)
{
if(c[i][j]>d[i])
d[i]=c[i][j];
}
}
for(int j=0;j<b;j++)
{
e[j]=c[0][j];
for(int i=1;i<a;i++)
{
if(c[i][j]<e[j])
e[j]=c[i][j];
}
}
for(int i=0;i<a;i++)
{
for(int j=0;j<b;j++)
{
if(c[i][j]==d[i]&&c[i][j]==e[j])
{
System.out.print(i+" "+j);
sum++;
}
}
}
if(sum==0) {System.out.print("0");}
}
}
7-2 数字螺旋方阵 (10 分)
输入一个整数n,输出n阶数字螺旋方阵。
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n =in.nextInt();
int[][] m= new int [n][n];
int right = 1, down = 2, left = 3, top = 4;
int direction = right;
int i = 0, j = 0;
for(int p=1; p<=n*n; p++){
m[i][j] = p;
if(direction == right){
if(j + 1 < n && m[i][j+1] == 0){
j++;
}else{
i++;
direction = down;
continue;
}
}
if(direction == down)
{
if(i+1<n && m[i+1][j] == 0)
{
i++;
}else{
j--;
direction = left;
continue;
}
}
if(direction == left)
{
if(j-1 >= 0 && m[i][j-1] == 0)
{
j--;
}else{
i--;
direction = top;
continue;
}
}
if(direction == top)
{
if(i-1 >= 0 && m[i-1][j] == 0){
i--;
}else{
j++;
direction = right;
continue;
}
}
}
for(int x = 0; x < n; x ++){
for(int y = 0; y < n; y ++){
if(y<(n-1)){
System.out.printf("%-4d",m[x][y]);
}else{
System.out.printf("%-4d",m[x][y]);
System.out.println();
}
}
}
}}
7-3 九宫格的生成 (10 分)
输入奇数n,形成n*n阶方阵。要求在这个方阵中填入1到n的平方的数,使得方阵的每行的和、每列的和及两条对角线的和都相等。
import java.util.Scanner;
public class Main {
public static void main(String[] args){
boolean mark = true;
Scanner in = new Scanner(System.in);
int n= in.nextInt();
while (mark)
{
if (n % 2 == 0 || n < 0){
n = in.nextInt();
}
else{
mark = false;
}
}
int[][] arr = new int[n][n];
int a = 0, b = n / 2;
for (int i = 1; i <= n*n; i++){
arr[a][b] = i;
a--;
b++;
if (a < 0 && b >= n){
a += 2;
b--;
}
else if (a < 0){
a = n - 1;
}
else if (b >= n){
b = 0;
}
else if (arr[a][b] != 0){
a += 2;
b--;
}
}
for (int[] c : arr){
for (int d : c){
System.out.printf("%-4d",d);
}
System.out.println();
}
}}