数组
一、交换最小值和最大值
本题要求编写程序,先将输入的一系列整数中的最小值与第一个数交换,然后将最大值与最后一个数交换,最后输出交换后的序列。
注意:题目保证最大和最小值都是唯一的。
输入格式:
输入在第一行中给出一个正整数N(≤10),第二行给出N个整数,数字间以空格分隔。
输出格式:
在一行中顺序输出交换后的序列,每个整数后跟一个空格。
输入样例:
5 8 2 5 1 4
输出样例:
1 2 5 4 8
1 import java.util.Scanner; 2 public class Main{ 3 public static void main(String args[]){ 4 Scanner sc=new Scanner(System.in); 5 int n=sc.nextInt(); 6 int []arr=new int [n]; 7 for(int i=0;i<n;i++) 8 { 9 arr[i]=sc.nextInt(); 10 11 } 12 int max=arr[0],x=0; 13 int min=arr[0],m=0; 14 for(int i=0;i<n;i++) 15 { 16 17 if(arr[i]<=min) 18 {min=arr[i]; 19 m=i;} 20 } 21 int s=0; 22 s=arr[0]; 23 arr[0]=arr[m]; 24 arr[m]=s; 25 max=arr[0]; 26 for(int i=0;i<n;i++) 27 if(arr[i]>=max) 28 {max=arr[i]; 29 x=i;} 30 31 32 s=arr[n-1]; 33 arr[n-1]=arr[x]; 34 arr[x]=s; 35 36 37 for(int i=0;i<n;i++) 38 { 39 System.out.print(arr[i]+" "); 40 41 } 42 sc.close(); 43 } 44 }
二、两个一维数组相加求和
1.本题目要求得的两个向量的和,每一个向量通过一个一维数组表示,具体要求为:
1在Main类中.创建一个方法,方法功能为求两个一维数组之和得到求和数组并返回。方法声明为:
public static int[] add(int arr[],int []arr2)
2.在main方法中创建两个一维数组,一维数组的长度通过键盘得到,数组的元素通过键盘输入。
3.调用add方法得到两个一维数组之和,并输出这个一维数组的值。
输入格式:
第一行输入数组的元素个数 第二行输入第一个数组的各个元素 中间以空格隔开 第三行输入第二个数组的各个元素 中间以空格隔开
输出格式:
输出求和数组的各个元素,每行输出一个元素。
输入样例:
在这里给出一组输入。例如:
4 1 2 3 4 5 6 7 8
输出样例:
在这里给出相应的输出。例如:
6 8 10 12
1 import java.util.Scanner; 2 public class Main{ 3 public static void add(int []arr,int []arr2) 4 { 5 int []a=arr; 6 for(int i=0;i<a.length;i++) 7 { 8 a[i]=arr[i]+arr2[i]; 9 } 10 for(int i=0;i<a.length;i++) 11 System.out.println(a[i]); 12 13 } 14 15 public static void main(String args[]){ 16 17 Scanner sc=new Scanner(System.in); 18 19 int a=sc.nextInt(); 20 int []arr1=new int [a]; 21 int []arr2=new int [a]; 22 for(int i=0;i<a;i++) 23 { 24 arr1[i]=sc.nextInt(); 25 } 26 for(int i=0;i<a;i++) 27 { 28 arr2[i]=sc.nextInt(); 29 } 30 add(arr1,arr2); 31 32 33 34 sc.close(); 35 } 36 }
三、求整数序列中出现次数最多的数
本题要求统计一个整型序列中出现次数最多的整数及其出现次数。
输入格式:
输入在一行中给出序列中整数个数N(0<N≤1000),以及N个整数。数字间以空格分隔。
输出格式:
在一行中输出出现次数最多的整数及其出现次数,数字间以空格分隔。题目保证这样的数字是唯一的。
输入样例:
10 3 2 -1 5 3 4 3 0 3 2
输出样例:
3 4
1 import java.util.Scanner; 2 public class Main{ 3 public static void main(String args[]){ 4 Scanner sc=new Scanner(System.in); 5 int n=sc.nextInt(); 6 int []arr=new int [n]; 7 int []a=new int [n]; 8 for(int i=0;i<n;i++) 9 { 10 arr[i]=sc.nextInt(); 11 } 12 for(int i=0;i<n;i++) 13 { 14 for(int j=i;j<n;j++) 15 { 16 if(arr[i]==arr[j]) 17 { 18 a[i]++; 19 } 20 } 21 } 22 int max=0; 23 int c=0; 24 for(int i=0;i<n;i++) 25 { 26 if(a[i]>max) 27 { 28 max=a[i]; 29 c=i; 30 } 31 } 32 System.out.print(arr[c]+" "+a[c]); 33 sc.close(); 34 } 35 36 37 }
四、结伴同行去秋游
可以去秋游啦!同学们别提多高兴了!老师说,单独行动有点危险,那么我们还是结伴同行吧。结伴的规则是这样的:排在最前的一个人和排在最后的那个人结成同伴,排在第2个的与排在倒数第2个的结成同伴......依次类推,2个一组成同伴。好,请马上排出来吧!老师语音一落,同学们“唰唰唰”很快结伴好了,准备出发喽!
输入格式:
第一行是一个整数n,表明n个同学。(2<=n<=50,n为偶数) 。 第二行n个整数表明n个同学的学号,学号之间有一个空格。
输出格式:
共n/2行,每行二个整数,表明结伴同学的学号,两个学号之间有一个空格。
输入样例:
6 5 6 4 12 3 2
输出样例:
5 2 6 3 4 12
1 import java.util.Scanner; 2 public class Main{ 3 public static void main (String args[]){ 4 Scanner sc=new Scanner (System.in); 5 int n=sc.nextInt(); 6 int []arr=new int [n]; 7 for(int i=0;i<n;i++) 8 { 9 arr[i]=sc.nextInt(); 10 11 12 } 13 for(int i=0;i<n/2;i++) 14 { 15 System.out.print(arr[i]+" "+arr[n-i-1]); 16 System.out.println(); 17 18 } 19 sc.close(); 20 } 21 22 23 }
五、 摘苹果
陶陶家的院子里有一棵苹果树,每到秋天树上就会结出很多苹果。苹果成熟的时候,陶陶就会跑去摘苹果。陶陶有个30厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳上再试试。
现在已知每个苹果到地面的高度,以及陶陶把手伸直的时候能够达到的最大高度,请帮陶陶算一下她能够摘到的苹果的数目。假设她碰到苹果,苹果就会掉下来。
输入格式:
包括三行数据。 第一行是一个整数n,表示有n个苹果。苹果至少有一个,不超过1000个。 第二行包含n个100到200之间(包括100和200)的整数(以厘米为单位)分别表示这n个苹果到地面的高度,两个相邻的整数之间用一个空格隔开。 第三行是一个100到120之间(包含100和120)的整数(以厘米为单位),表示陶陶把手伸直的时候能够达到的最大高度。
输出格式:
一个整数,表示陶陶能够摘到的苹果的数目。
输入样例:
10 100 200 150 140 129 134 167 198 200 111 110
输出样例:
5
1 import java.util.Scanner; 2 public class Main{ 3 public static void main(String args[]) 4 { 5 Scanner sc=new Scanner(System.in); 6 int s=sc.nextInt(); 7 int [] arr=new int [s]; 8 for(int i=0;i<s;i++) 9 { 10 arr[i]=sc.nextInt(); 11 } 12 int h=sc.nextInt(); 13 int a=0; 14 for(int i=0;i<s;i++) 15 { 16 if(arr[i]<=(h+30)) 17 a++; 18 19 } 20 System.out.print(a); 21 22 23 24 sc.close(); 25 26 } 27 28 29 30 }
六、求次大值
找出给定n个整数中的次大值(第二大)。
输入格式:
输入分为两行,第一行一个整数n,表示数据的个数,第二行是由空格分隔的n个整数。
输出格式:
n个数据中的次大值。
输入样例:
6 23 34 8 26 17 9
输出样例:
26
1 import java.util.Scanner; 2 public class Main{ 3 public static void main(String args[]) 4 { 5 Scanner sc=new Scanner(System.in); 6 int s=sc.nextInt(); 7 int []arr=new int [s]; 8 for(int i=0;i<s;i++) 9 { 10 arr[i]=sc.nextInt(); 11 } 12 13 for(int i=0;i<s;i++) 14 { 15 for(int j=0;j<s-i-1;j++) 16 { 17 if(arr[j]>arr[j+1]) 18 { 19 int a=arr[j]; 20 arr[j]=arr[j+1]; 21 arr[j+1]=a; 22 } 23 24 25 } 26 27 28 } 29 System.out.print(arr[s-2]); 30 31 32 33 sc.close(); 34 } 35 }
七、求一批整数中出现最多的个位数字
给定一批整数,分析每个整数的每一位数字,求出现次数最多的个位数字。例如给定3个整数1234、2345、3456,其中出现最多次数的数字是3和4,均出现了3次。
输入格式:
输入在第1行中给出正整数N(≤),在第二行中给出N个不超过整型范围的非负整数,数字间以空格分隔。
输出格式:
在一行中按格式“M: n1 n2 ...”输出,其中M是最大次数,n1、n2、……为出现次数最多的个位数字,按从小到大的顺序排列。数字间以空格分隔,但末尾不得有多余空格。
输入样例:
3 1234 2345 3456
输出样例:
3: 3 4
1 import java.util.Scanner; 2 public class Main{ 3 public static void main (String args[]){ 4 Scanner sc=new Scanner(System.in); 5 int []arr={0,0,0,0,0,0,0,0,0,0}; 6 int s=sc.nextInt(); 7 int a=0; 8 for(int i=0;i<s;i++) 9 { 10 a=sc.nextInt(); 11 if(a==0) 12 { 13 arr[0]++; 14 } 15 while (a > 0) 16 { 17 arr[a%10]++; 18 a/= 10; 19 } 20 } 21 int f=-1; 22 for(int i=0;i<10;i++) 23 { 24 if(f<arr[i]) 25 f=arr[i]; 26 27 } 28 System.out.print(f+":"); 29 30 for(int i=0;i<10;i++) 31 { if(f==arr[i]) 32 System.out.print(" "+i); 33 34 } 35 36 sc.close(); 37 } 38 39 }
八、点赞
微博上有个“点赞”功能,你可以为你喜欢的博文点个赞表示支持。每篇博文都有一些刻画其特性的标签,而你点赞的博文的类型,也间接刻画了你的特性。本题就要求你写个程序,通过统计一个人点赞的纪录,分析这个人的特性。
输入格式:
输入在第一行给出一个正整数N(≤),是该用户点赞的博文数量。随后N行,每行给出一篇被其点赞的博文的特性描述,格式为“K F1⋯FK”,其中1,Fi(,)是特性标签的编号,我们将所有特性标签从1到1000编号。数字间以空格分隔。
输出格式:
统计所有被点赞的博文中最常出现的那个特性标签,在一行中输出它的编号和出现次数,数字间隔1个空格。如果有并列,则输出编号最大的那个。
输入样例:
4 3 889 233 2 5 100 3 233 2 73 4 3 73 889 2 2 233 123
输出样例:
233 3
1 import java.util.Scanner; 2 public class Main { 3 public static void main(String args[]) { 4 Scanner sc = new Scanner(System.in); 5 int m=sc.nextInt(); 6 int n,t=0; 7 int []s=new int [1001]; 8 for(int i=0;i<m;i++) 9 { 10 n=sc.nextInt(); 11 for(int j=0;j<n;j++) 12 { 13 t=sc.nextInt(); 14 s[t]++; 15 } 16 17 } 18 int max=0; 19 int c=0; 20 for(int i=0;i<1001;i++) 21 { 22 if(max<=s[i]) 23 { 24 max=s[i]; 25 c=i; 26 } 27 } 28 System.out.println(c+" "+s[c]); 29 sc.close(); 30 } 31 32 33 }
九、矩阵相加
求矩阵A+B的结果,程序给出部分代码,请在原来代码基础上填写完整,完成整个程序。
1 import java.util.Scanner; 2 //矩阵相加 C = A + B //写出方法调用 3 public class Main { 4 public static Scanner scan = new Scanner(System.in); 5 public static void main(String[] args) { 6 // TODO Auto-generated method stub 7 int m = scan.nextInt();//矩阵的行 8 int n = scan.nextInt();//矩阵的列 9 //创建二维数组a 行m,列n 10 11 12 //调用方法 为a输入数据 13 14 //创建二维数组b 行m,列n 15 16 //调用方法,为b输入数据 17 18 //调用方法 求 a+b 19 20 21 //输出结果 22 23 } 24 public static void inputData(int[][] arr){ 25 for(int i =0;i<arr.length;i++) 26 for(int j=0;j<arr[i].length;j++) 27 arr[i][j] =scan.nextInt(); 28 } 29 public static int[][] addMatrix(int[][]arr1,int[][]arr2){ 30 int [][] c = new int[arr1.length][arr1[0].length]; 31 for(int i =0;i<arr1.length;i++) 32 for(int j =0;j<arr1[i].length;j++) 33 c[i][j] = arr1[i][j] + arr2[i][j]; 34 return c; 35 } 36 public static void showResult(int[][] arr){ 37 for(int i =0;i<arr.length;i++){ 38 for(int j =0;j<arr[i].length;j++) 39 System.out.print(" "+arr[i][j]); 40 System.out.println(); 41 } 42 }
输入格式:
第一行通过键盘输入矩阵的行数和列数 第二行通过键盘输入矩阵A的元素,中间用空格隔开 第三行通过键盘输入矩阵B的元素 ,中间用空格隔开
输出格式:
输出矩阵相加的结果,每一行输出矩阵一行,每一个元素前面有一个空格
输入样例:
在这里给出一组输入。例如:
2 3 1 2 3 4 5 6 2 3 4 5 6 7
输出样例:
在这里给出相应的输出。例如:
3 5 7 9 11 13
1 import java.util.Scanner; 2 //矩阵相加 C = A + B //写出方法调用 3 4 public class Main { 5 public static Scanner scan = new Scanner(System.in); 6 public static void main(String[] args) { 7 // TODO Auto-generated method stub 8 int m = scan.nextInt();//矩阵的行 9 int n = scan.nextInt();//矩阵的列 10 int[][] c=new int [m][n]; 11 //创建二维数组a 行m,列n 12 int [][]arr1=new int [m][n]; 13 //调用方法 为a输入数据 14 inputData(arr1); 15 //创建二维数组b 行m,列n 16 int [][]arr2=new int [m][n]; 17 18 //调用方法,为b输入数据 19 inputData(arr2); 20 21 //调用方法 求 a+b 22 c = addMatrix(arr1,arr2); 23 24 //输出 25 showResult(c); 26 27 } 28 public static void inputData(int[][] arr){ 29 for(int i =0;i<arr.length;i++) 30 for(int j=0;j<arr[i].length;j++) 31 arr[i][j] =scan.nextInt(); 32 } 33 public static int[][] addMatrix(int[][]arr1,int[][]arr2){ 34 int [][] c = new int[arr1.length][arr1[0].length]; 35 for(int i =0;i<arr1.length;i++) 36 for(int j =0;j<arr1[i].length;j++) 37 c[i][j] = arr1[i][j] + arr2[i][j]; 38 return c; 39 } 40 public static void showResult(int[][] arr){ 41 for(int i =0;i<arr.length;i++){ 42 for(int j =0;j<arr[i].length;j++) 43 System.out.print(" "+arr[i][j]); 44 System.out.println(); 45 } 46 scan.close(); 47 } 48 49 50 }
十、矩阵运算
给定一个n×n的方阵,本题要求计算该矩阵除副对角线、最后一列和最后一行以外的所有元素之和。副对角线为从矩阵的右上角至左下角的连线。
输入格式:
输入第一行给出正整数n(1);随后n行,每行给出n个整数,其间以空格分隔。
输出格式:
在一行中给出该矩阵除副对角线、最后一列和最后一行以外的所有元素之和。
输入样例:
4 2 3 4 1 5 6 1 1 7 1 8 1 1 1 1 1
输出样例:
35
1 import java.util.Scanner; 2 public class Main { 3 4 public static void main(String[] args) { 5 Scanner sc=new Scanner(System.in); 6 int [][]arr; 7 int n; 8 int s=0; 9 n=sc.nextInt(); 10 arr=new int[n][n]; 11 for(int i=0;i<n;i++) 12 { 13 for(int j=0;j<n;j++) 14 { 15 arr[i][j]=sc.nextInt(); 16 } 17 } 18 for(int i=0;i<n;i++) 19 { 20 for(int j=0;j<n;j++) 21 { 22 s=s+arr[i][j]; 23 24 } 25 26 27 } 28 29 for(int i=0;i<n;i++) 30 { 31 32 s=s-arr[i][n-1]; 33 s=s-arr[i][n-i-1]; 34 s=s-arr[n-1][i]; 35 } 36 s=s+arr[0][n-1]; 37 s=s+arr[n-1][0]; 38 s=s+arr[n-1][n-1]; 39 System.out.print(s); 40 41 42 43 // TODO Auto-generated method stub 44 sc.close(); 45 46 } 47 48 }