数组练习
例1. 输入一组数据(10个数据),找出最大值(并给出最大值所在的位置),并输出。
进一步思考:若要求同时求出最大值、最小值,如何设计程序?
例2. 产生10个整数放到数组中,将其顺序颠倒后输出
例3:用数组来处理,求解Fibonacci数列的前20项,并输出,一行5个数据。
例4:定义一个数组,输出数组中高于平均值的元素。
例5:分别形成下面数组并输出。
例7: 求二维数组中最大元素及其所在的行和列位置。
例8:将一个二维数组行和列元素互换,存到另一个二维数组中。
例9:设计程序,生成杨辉三角形(利用数组)
例10:通过键盘输入任意的10个数,按升序排序,并输出排序结果。
例11:有N个数据,存放在数组A中,现输入一个数据x,在数组A中查找数据x是否存在,如果存在,则输出第一次出现的位置号,否则,输出-1。
例12: 输入10个数,并按有小到大排序输出,然后再输入一个数据,插入已排好序的数组中,插入后仍然是有小到大排序。
例13:在数组中查找一个数,并记录其下标。
例14:折半查找
例15:选择排序
例16:冒泡排序
.
import java.util.*;
public class Test
{
public static void main(String[] args)
{
//work1();
//work2();
//work3();
//work4();
//work5();
//work7();
//work8();
//work9();
//work10();
//work11();
//work12();
//work13();
//work14();
//work15();
//work16();
//work17();
}
/*例1. 输入一组数据(10个数据),找出最大值(并给出最大值所在的位置),并输出。
进一步思考:若要求同时求出最大值、最小值,如何设计程序?
*/
public static void work1()
{
Scanner sc = new Scanner(System.in);
int a[] = new int[10];
for(int i = 0;i<10;i++)
{
a[i]=sc.nextInt();
}
int maxx=a[0];int minn=a[0];int maxxlocal = 1;int minnlocal=1;
for(int i = 0;i<10;i++)
{
if(a[i]>maxx)
{
maxx=a[i];
maxxlocal=i+1;
}
if(a[i]<minn)
{
minn=a[i];
minnlocal=i+1;
}
}
System.out.println("最大值为: "+maxx+"最大值的位置为: "+maxxlocal);
System.out.println("最小值为: "+minn+"最小值的位置为: "+minnlocal);
}
//例2. 产生10个整数放到数组中,将其顺序颠倒后输出
public static void work2()
{
Scanner sc = new Scanner(System.in);
int a[] = new int[10];
for(int i = 0;i<10;i++)
{
a[i]=(int) (Math.random()*100);
System.out.print(a[i]+" ");
}
System.out.println();
for(int i = 0;i<5;i++)
{
int temp = a[i];
// System.out.print("--->"+temp+"<---");
a[i]=a[9-i];
a[9-i]=temp;
}
for(int i = 0;i<10;i++)
{
System.out.print(a[i]+" ");
}
}
//例3:用数组来处理,求解Fibonacci数列的前20项,并输出,一行5个数据。
public static void work3()
{
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();
}
}
}
//例4:定义一个数组,输出数组中高于平均值的元素。
public static void work4()
{
int a[] = new int[10];
int avg=0;int sum=0;
Scanner sc = new Scanner(System.in);
for(int i = 0;i<10;i++)
{
a[i]=sc.nextInt();
sum+=a[i];
}
avg = sum/10;
for(int i = 0;i<10;i++)
{
if(a[i]>avg)
{
System.out.print(a[i]+" ");
}
}
}
//例5:分别形成下面数组并输出。
public static void work5()
{
int a[][]= new int[5][5];
a[0][0]=6;
for(int i = 0;i<5;i++)
{
a[i][i]=(i+1)*6;
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();
}
}
//例7: 求二维数组中最大元素及其所在的行和列位置。
public static void work7()
{
int a[][]=new int[5][5];
for(int i =0;i<a.length;i++)
{
for(int j=0;j<a[i].length;j++)
{
a[i][j]=(int)(Math.random()*100);
}
}
int maxx=a[0][0];int maxxx=0;int maxxy=0;
for(int i=0;i<a.length;i++)
{
for(int j = 0;j<a[i].length;j++)
{
if(a[i][j]>maxx)
{
maxx=a[i][j];
maxxx=i;maxxy=j;
}
}
}
System.out.println("最大值为: "+maxx+"最大值的位置为: "+maxxx+maxxy);
}
//例8:将一个二维数组行和列元素互换,存到另一个二维数组中。
public static void work8()
{
int a[][]=new int[5][5];
for(int i =0;i<a.length;i++)
{
for(int j=0;j<a[i].length;j++)
{
a[i][j]=(int)(Math.random()*100);
System.out.print(a[i][j]+" ");
}
System.out.println();
}
System.out.println();
int b[][]= new int[5][5];
for(int i = 0;i<b.length;i++)
{
for(int j = 0;j<b[i].length;j++)
{
b[i][j]=a[j][i];
System.out.print(b[i][j]+" ");
}
System.out.println();
}
}
//例9:设计程序,生成杨辉三角形(利用数组)
public static void work9()
{
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int a[][] = new int[100][100];
for(int i=0;i<n;i++)
{
a[i][0]=1;
a[i][i]=1; //先将杨辉三角每行的第一个和最后一个赋值为1
}
for(int i=2;i<n;i++) //已知每个数等于它上方两数的之和
{
for(int j=1;j<i;j++)
{
a[i][j]=a[i-1][j-1]+a[i-1][j];
}
}
for(int i=0;i<n;i++) //打印输出
{
for(int j=0;j<=i;j++)
{
System.out.printf(a[i][j]+" ");
}
System.out.println();
}
}
//例10:通过键盘输入任意的10个数,按升序排序,并输出排序结果。
public static void work10()
{
int a[]=new int[10];
Scanner sc = new Scanner(System.in);
for(int i = 0;i<10;i++)
{
a[i]=sc.nextInt();
}
for(int i = 0;i<10;i++)
{
for(int j =0;j<9;j++)
{
if(a[j]>a[j+1])
{
int temp;
temp = a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
for(int i=0;i<10;i++)
{
System.out.print(a[i]+" ");
}
}
//例11:有N个数据,存放在数组A中,现输入一个数据x,
//在数组A中查找数据x是否存在,如果存在,则输出第一次出现的位置号,否则,输出-1。
public static void work11()
{
Scanner sc = new Scanner(System.in);
int n=sc.nextInt();
int a[]=new int[n];
for(int i = 0;i<n;i++)
{
a[i]=sc.nextInt();
}
int x= sc.nextInt();
for(int i =0;i<n;i++)
{
if(x==a[i])
{
System.out.println(i+1);
break;
}
if(i==n)
{
System.out.println("-1");
}
}
}
/*
* 例12: 输入10个数,并按有小到大排序输出,然后再输入一个数据,
* 插入已排好序的数组中,插入后仍然是有小到大排序。
*/
public static void work12()
{
Scanner sc = new Scanner(System.in);
int a[]=new int[11];
for(int i = 0;i<10;i++)
{
a[i]=sc.nextInt();
}
for(int i = 0;i<10;i++)
{
for(int j =0;j<9;j++)
{
if(a[j]>a[j+1])
{
int temp;
temp = a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
int x=sc.nextInt();
for(int i=10;i>0;i--)
{
if(x>=a[i-1]&&x<=a[i])
{
a[i]=x;
break;
}
a[i]=a[i-1];
}
for(int i = 0;i<11;i++)
{
System.out.print(a[i]+" ");
}
}
//例13:在数组中查找一个数,并记录其下标。
public static void work13()
{
Scanner sc = new Scanner(System.in);
int temp=sc.nextInt();
int num = 0;
int a[]=new int[10];
for(int i = 0;i<10;i++)
{
a[i]=i+1;
}
for(int i = 0;i<10;i++)
{
if(a[i]==temp)
{
num=i+1;
}
}
System.out.println(temp+"的下标为:"+num);
}
//折半查找
public static void work14()
{
//Scanner sc = new Scanner(System.in);
int low=0,mid,high=100-1;
int a[]=new int[100];
//mid=a.length/2;
for(int i = 0;i<100;i++)
{
a[i]=(int)(Math.random()*100);
//System.out.print(a[i]+" ");
}
Arrays.sort(a);
int key=a[80];
while(low<=high)
{
mid = (low+high)/2;
//System.out.println(key+" "+mid);
if(key>mid)
{
low=a[mid+1];
}
else if(key<mid)
{
high = a[mid-1];
}
else
{
System.out.println("下标为: "+mid);
break;
}
}
//System.out.println("1111111111111");
}
//例15:选择排序
public static void work15()
{
int a[]=new int[100];
//mid=a.length/2;
for(int i = 0;i<100;i++)
{
a[i]=(int)(Math.random()*100);
//System.out.print(a[i]+" ");
}
for(int i = 0;i<a.length;i++)
{
int minIndex = i;
for(int j = i+1;i<a.length;i++)
{
if(a[j]<a[minIndex])
{
minIndex = j;
}
int temp = a[i];
a[i]=a[j];
a[j]=temp;
}
}
for(int i = 0;i<a.length;i++)
{
System.out.print(a[i]+" ");
}
}
//例16:冒泡排序
public static void work16()
{
int a[]=new int[100];
//mid=a.length/2;
for(int i = 0;i<100;i++)
{
a[i]=(int)(Math.random()*100);
//System.out.print(a[i]+" ");
}
//int temp=a[80];
for(int i = 0;i<a.length;i++)
{
for(int j = 0;j<a.length-1;j++)
{
if(a[j]>=a[j+1])
{
int temp2 = a[j];
a[j]=a[j+1];
a[j+1]=temp2;
}
}
}
for(int i = 0;i<a.length;i++)
{
System.out.print(a[i]+" ");
}
}
}