数组,,,,

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();

        }

    }}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值