本帖最后由 肥猫 于 2013-7-8 21:08 编辑
第二题上交...- /**
- 功能:求出1-100之间的素数,假设有n个,将这些素数存入a[n+1]的数组中。
- (其中n个是求出的各个素数,还有一个是随机添加其中的一个素数)
- 这样数组中就有相同的两个素数,写一个搜索算法,找出数组中相同的那个素数。
- (随机添加的素数,可手动指定,也可利用随机方法产生)
- author:肥猫
- */
- import java.util.*;
- class Test333
- {
- public static void main(String[] args)
- {
- ArrayList<Integer> al = new ArrayList<Integer>();//先定义一个底层基于数组的容器来存储1-100的素数。
- al.add(2);//由于素数本身的意义所以需要手动添加第一个元素2。
- boolean b = false;
- for(int i =2;i<=100;i++)//双重循环找出符合条件的素数并添加到容器中。
- {
- for(int j =2;j<i;j++)
- {
- if(i%j==0)
- {
- b=false;
- break;
- }
- else
- b=true;
- }
- if(b)
- {
- al.add(i);
- }
- }
- int x=al.size()+1;
- int[] a = new int[x];//根据容器的大小动态初始化数组。
- for(int k=0;k<x-1;k++)
- {
- a[k]=al.get(k);//将集合容器的值赋到数组中。
- }
- System.out.println("数组的长度是:"+a.length);
- int key =a[(int)(Math.random()*(x-2))];//利用角标,随即抽取前面的角标将获得的值置于最后一位。
- a[x-1]=key;
- System.out.println("随机到的质数为:"+key);
- System.out.print("数组:");
- for(int l=0;l<a.length;l++){//遍历数组并输出以便于用二分法对其查找。
- if(a[l]==key&&l!=x-1)
- {
- System.out.print(a[l] +",");
- }
- else if(a[l]==a[x-1])
- {
- System.out.println(a[l]);
- }
- else
- {
- System.out.print(a[l]+",");
- }
- }
- System.out.print("查找元素的索引是:");
- System.out.println(Arrays.binarySearch(a,0,x-1,key));//二分法对数组查找其索引。
- }
- }
复制代码
|