数组练习

本文展示了多种数据处理和排序算法的Java实现,包括寻找数组中的最大值、最小值,生成并反转数组,计算Fibonacci数列,判断数组元素是否高于平均值,输出二维数组中的最大值及其位置,行列互换,杨辉三角形,选择排序,冒泡排序,以及处理体操比赛评分等。这些实例涵盖了基础算法和数据结构的应用。
摘要由CSDN通过智能技术生成
  1. 输入一组数据(10个数据),找出最大值(并给出最大值所在的位置),并输出。
    进一步思考:若要求同时求出最大值、最小值,如何设计程序?
package draft_1;

import java.util.Scanner;

//输入一组数据(10个数据),找出最大值(并给出最大值所在的位置),并输出
public class Text {
	public static void main(String[] args) {
		Scanner cin = new Scanner(System.in);
		int n;
		double a[];
		n = cin.nextInt();
		a = new double[n];
		for (int i =0; i<n; i++) {
			a[i] = cin.nextInt();
		}
		max(a,n);
		min(a,n);
	}
	
	public static void max(double a[],int n) {
		double temp = a[0];
		int location = 0;
		for(int i = 0; i<n; i++) {
			if(temp<a[i]) {
				temp = a[i];
				location = i;
			}
		}
		System.out.println(temp+" "+(location+1));
	}
	
	public static void min(double a[],int n) {
		double temp = a[0];
		int location = 0;
		for(int i = 0; i<n; i++) {
			if(temp>a[i]) {
				temp = a[i];
				location = i;
			}
		}
		System.out.println(temp+" "+(location+1));
	}
}
  1. 产生10个整数放到数组中,将其顺序颠倒后输出
package draft_1;

import java.util.Scanner;

//产生10个整数放到数组中,将其顺序颠倒后输出
public class Text {
	public static void main(String[] args) {
		Scanner cin = new Scanner(System.in);
		int n;
		int a[];
		n = cin.nextInt();
		a = new int[n];
		for (int i = 0; i<n; i++) {
			a[i] = (int) (Math.random()*100);
		}
		for(int i = 0; i<n; i++) {
			System.out.print(a[i]+" ");
		}
		System.out.println();
		for(int i = n-1; i>=0; i--) {
			System.out.print(a[i]+" ");
		}
	}
}
  1. 用数组来处理,求解Fibonacci数列的前20项,并输出,一行5个数据。
package draft_1;

//用数组来处理,求解Fibonacci数列的前20项,并输出,一行5个数据
public class Text {
	public static void main(String[] args) {
		int a[] = new int[20];
		a[0] = 0;
		a[1] = 1;
		for(int i = 2; i<20; i++) {
			a[i] = a[i-1]+a[i-2];
		}
		for(int i = 0; i<20; i++) {
			System.out.print(a[i]+" ");
			if((i+1)%5==0)
				System.out.println();
		}
	}
}
  1. 定义一个数组,输出数组中高于平均值的元素。
package draft_1;

//定义一个数组,输出数组中高于平均值的元素
public class Text {
	public static void main(String[] args) {
		int a[] = new int[10];
		for(int i = 0; i<10; i++) {
			a[i] = (int)(Math.random()*100);
		}
		MoerAverage(a, Average(a));
	}

	public static float Average(int a[]) {
		int sum = 0;
		float average;
		for (int i = 0; i<a.length; i++) {
			sum = sum+a[i];
		}
		average = sum/a.length;
		return average;
	}

	public static void MoerAverage(int a[], float b) {
		float average = b;
		System.out.println("平均值:"+Average(a));
		for (int i = 0; i < 10; i++) {
			if (a[i]>average) {
				System.out.println(a[i]);
			}
		}
	}
}
  1. 分别形成下面数组并输出。
    题目
package draft_1;

//打印数组图形
public class Text {
	public static void main(String[] args) {
		int a[][] = new int[5][5];
		a[0][0] = 6;
		for(int i = 1; i<5; i++) {
			a[i] = new int[i+1];
			a[i][i] = (i+1)*a[0][0];
			for(int j = i-1; j>=0; j--){
				a[i][j] = a[i][i]-(i-j);
			}		
		}
		for(int i = 0; i<5; i++) {
			for(int j = 0; j<i+1; j++)
				System.out.print(a[i][j]+" ");
			System.out.println();
		}
	}
}
  1. 求二维数组中最大元素及其所在的行和列位置。
package draft_1;

//求二维数组中最大元素及其所在的行和列位置
public class Text {
	public static void main(String[] args) {
		int a[][] = new int[4][4];
		for (int i = 0; i<4; i++) {
			for(int j = 0; j<4; j++) {
				a[i][j] = (int)(Math.random()*100);
			}
		}
		Print(a);
		Max(a);
	}
	
	public static void Print(int a[][]) {
		for (int i = 0; i<a.length; i++) {
			for(int j = 0; j<a[i].length; j++) {
				System.out.print(a[i][j]+" ");		
			}
			System.out.println();
		}
	}
	
	public static void Max(int a[][]) {
		int max,q,s = 0,t = 0;
		max = a[0][0];
		for(int i = 0; i<a.length; i++) {
			for(int j = 0; j<a[i].length; j++) {
				if(a[i][j]>max) {
					q = max;
					max = a[i][j];
					a[i][j] = q;
					s = i;
					t = j;
				}
			}
		}
		System.out.println("最大值:"+max+" 行:"+(s+1)+" 列:"+(t+1));
	}
}
  1. 将一个二维数组行和列元素互换,存到另一个二维数组中。
package draft_1;

//将一个二维数组行和列元素互换,存到另一个二维数组中
public class Text {
	public static void main(String[] args) {
		int a[][] = new int[4][4];
		for (int i = 0; i<4; i++) {
			for(int j = 0; j<4; j++) {
				a[i][j] = (int)(Math.random()*100);
			}
		}
		int b[][] = new int[4][4];
		Print(a);
		Exchange(a,b);
		Print(b);
	}
	
	public static void Print(int a[][]){
		for (int i = 0; i<a.length; i++) {
			for(int j = 0; j<a[i].length; j++){
				System.out.print(a[i][j]+" ");		
			}
			System.out.println();
		}
		System.out.println();
	}
	
	public static void Exchange(int a[][],int b[][]){
		int q;
		for (int i = 0; i<a.length; i++) {
			for(int j = i; j<a[i].length; j++){
					q = a[i][j];
					b[i][j] = a[j][i];
					b[j][i] = q;
			}
		}		
	}
	
}
  1. 设计程序,生成杨辉三角形(利用数组)
package draft_1;

//设计程序,生成杨辉三角形(利用数组)
public class Text {
	public static void main(String[] args) {
		int a[][] = new int[8][8];
		a[0][0] = 1;
		a[1][0] = 1;
		a[1][1] = 1;
		for(int i = 2; i<8; i++) {
			a[i] = new int[i+1];
			a[i][i] = 1;
			for(int j = 1; j<i; j++) {
				a[i][0] = 1;
				a[i][j] = a[i-1][j]+a[i-1][j-1];
			}
		}
		for(int i = 0; i<8; i++) {
			for(int j = 0; j<i+1; j++)
				System.out.print(a[i][j]+" ");
			System.out.println();
		}
	}
}
  1. 通过键盘输入任意的10个数,按升序排序,并输出排序结果。
package draft_1;

//通过键盘输入任意的10个数,按升序排序,并输出排序结果
public class Text {
	public static void main(String[] args) {
		int a[] = new int[10];
		for (int i = 0; i<10; i++) {
			a[i] = (int)(Math.random()*100);
		}
		Print(a);
		Sort(a);
		Print(a);
	}
	
	public static void Sort(int a[]) {
		int s;
		for (int i = 0; i<a.length; i++) {
			for(int j = 0; j<a.length; j++) {
				if(a[i]<=a[j]){
					s = a[i];
					a[i] = a[j];
					a[j] = s;
				}
			}
		}
	}
	
	public static void Print(int a[]) {
		for (int i = 0; i<a.length; i++) {
			System.out.print(a[i]+" ");
		}
		System.out.println();
	}
}
  1. 有N个数据,存放在数组A中,现输入一个数据x,在数组A中查找数据x是否存在,如果存在,则输出第一次出现的位置号,否则,输出-1。
package draft_1;

import java.util.Scanner;

/*有N个数据,存放在数组A中,现输入一个数据x,在数组A中查找数
据x是否存在,如果存在,则输出第一次出现的位置号,否则,输出-1*/
public class Text {
	public static void main(String[] args) {
		Scanner cin = new Scanner(System.in);
		int[] a = new int[10];
		for (int i = 0; i<10; i++) {
			a[i] = (int)(Math.random()*100);
		}
		Print(a);
		int x = cin.nextInt();
		Shor(a,x);
	}

	public static void Shor(int a[],int x){
		int s = 0,count = 0;;
		for (int i = 0; i<a.length; i++) {
			if(a[i]==x){
				s = i;
				break;
			}
			else count++;
		}
		if(count>=a.length)
			System.out.println("-1");
		else 
			System.out.println(s+1);
	}

	public static void Print(int a[]) {
		for (int i = 0; i<a.length; i++) {
			System.out.print(a[i] + " ");
		}
		System.out.println();
	}
}
  1. 输入10个数,并按有小到大排序输出,然后再输入一个数据,插入已排好序的数组中,插入后仍然是有小到大排序。
package draft_1;

import java.util.Scanner;

//选择排序
public class Text {
	public static void main(String[] args) {
		Scanner cin = new Scanner(System.in);
		int[] a = new int[10];
		for (int i = 0; i<10; i++) {
			a[i] = (int)(Math.random()*100);
		}
		Sort(a);
		Print(a);
		int y = cin.nextInt();
		Print(Insert(a,y));
	}
	
	public static void Sort(int a[]) {
		int s;
		for (int i = 0; i<a.length; i++) {
			for(int j = 0; j<a.length-1; j++) {
				if(a[j]>=a[j+1]) {
					s = a[j+1];
					a[j+1] = a[j];
					a[j] = s;
				}
			}
		}
	}
	
	public static int[] Insert(int a[],int x) {
		int[] b = new int[a.length+1];
		int i = 0,j = 0,t = 0;
		if(x<=a[0]) {
			b[0] = x;
			for(i = 1; i<b.length; i++)
				b[i] = a[i-1];
		}
		else if(x>=a[a.length-1]) {
			for(i = 0; i<b.length-1; i++)
				b[i] = a[i];
			b[b.length-1] = x;
		}
		else {
			while(a[i]<x)
				i++;
			for(j = 0; j<i; j++)
				b[j] = a[j];
			b[i] = x;
			for(j = i; j<b.length-1; j++)
				b[j+1] = a[j];
		}
		return b;
	}
	
	public static void Print(int a[]) {
		for (int i = 0; i<a.length; i++) {
			System.out.print(a[i] + " ");
		}
		System.out.println();
	}
}
  1. 选择排序
package draft_1;

import java.util.Scanner;

//选择排序
public class Text {
	public static void main(String[] args) {
		Scanner cin = new Scanner(System.in);
		int[] a = new int[10];
		for (int i = 0; i<10; i++) {
			a[i] = (int)(Math.random()*100);
		}
		Sort(a);
		Print(a);
	}

	public static void Sort(int a[]) {
		int s;
		for (int i = 0; i<a.length; i++) {
			for(int j = i+1; j<a.length; j++) {
				if(a[i]>=a[j]) {
					s = a[i];
					a[i] = a[j];
					a[j] = s;
				}
			}
		}
	}
	
	public static void Print(int a[]) {
		for (int i = 0; i<a.length; i++) {
			System.out.print(a[i] + " ");
		}
		System.out.println();
	}
}
  1. 冒泡排序
package draft_1;

import java.util.Scanner;

//冒泡排序
public class Text {
	public static void main(String[] args) {
		Scanner cin = new Scanner(System.in);
		int[] a = new int[10];
		for (int i = 0; i<10; i++) {
			a[i] = (int)(Math.random()*100);
		}
		Sort(a);
		Print(a);
	}

	public static void Sort(int a[]) {
		int s;
		for (int i = 0; i<a.length; i++) {
			for(int j = 0; j<a.length-1; j++) {
				if(a[j]>=a[j+1]) {
					s = a[j+1];
					a[j+1] = a[j];
					a[j] = s;
				}
			}
		}
	}
	
	public static void Print(int a[]) {
		for (int i = 0; i<a.length; i++) {
			System.out.print(a[i] + " ");
		}
		System.out.println();
	}
}

综合题:

体操运动员参加自由体操决赛,有10个评委为他们打分。选手的成绩计算方法是:10个评委分数中,去掉一个最高分和一个最低分,余下分数的平均值为选手的最后得分。假设有20名选手。要求,计算出每个选手的成绩,并给出名次,输出格式如下:
名次 姓名 评委成绩1(10个成绩依次列出) 最终得分

在这里插入代码片package draft_1;

import java.util.Scanner;

//体操
public class Text {
	public static void main(String[] args) {
		Print a = new Print();
		a.Average();
		a.shu();
		a.cout();
	}
}

class Print {
	
	private int[] name = new int[20];
	private int[][] score = new int[20][10];
	private int[] ave = new int[20];
	
	public Print() {
		for (int i = 0; i<20; i++) {
			name[i] = i+1;
			for (int j = 0; j<10; j++)
				score[i][j] = (int)(60+Math.random()*40);
		}
	}
	
	public int[] Average() {
		for(int i = 0; i<20; i++) {
			int s = 0;
			for(int j = 0; j<10; j++) {
				s = s+score[i][j];
			}
			ave[i] = (s-max(i)-min(i))/8;
		}
		return ave;
	}
	
	public int max(int i) {
		int max = score[i][0];
		for(int j = 0; j<10; j++) {
			if(max<score[i][j])
				max = score[i][j];
		}
		return max;
	}
	
	public int min(int i) {
		int min = score[i][0];
		for(int j = 0; j<10; j++) {
			if(min>score[i][j])
				min = score[i][j];
		}
		return min;
	}
	
	public void shu(){
		int s = 0;
		for(int i = 0; i<20; i++) {
			for(int j = i+1; j<20; j++) {
				if(ave[i]<ave[j]){
					s = ave[j];
					ave[j] = ave[i];
					ave[i] = s;
					s = name[j];
					name[j] = name[i];
					name[i] = s;
					for(int k = 0; k<10; k++) {
						s = score[j][k];
						score[j][k] = score[i][k];
						score[i][k] = s;
					}
				}
			}
		}
	}
	
	public void cout() {
		System.out.print("名次"+"\t选手"+"\t");
		for(int k = 0; k<10; k++)
			System.out.print("评委"+(k+1)+"\t");
		System.out.print("最终得分"+"\t");
		System.out.print("\n");
		for(int i = 0; i<20; i++) {
			System.out.print((i+1)+"\t选手"+name[i]+"\t");
			for (int j = 0; j<10; j++)
				System.out.print(score[i][j]+"\t");
			System.out.print(ave[i]+"\t");
			System.out.print("\n");
		}
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值