A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 打工人 金牌黑马   /  2012-10-29 11:58  /  2773 人查看  /  18 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 冯海霞 于 2012-10-29 17:00 编辑

要求:给出16个数:3,9,43,25,2,4,11,71,63,53,7,251,279,191,51,39
           找出其中的素数,并按从大到小的顺序输出。
         

18 个回复

正序浏览
import java.util.Arrays;

class Test12
{
        public static void main(String[] args)
        {
                int[] arr = {3,9,43,25,2,4,11,71,63,53,7,251,279,191,51,39};
                Arrays.sort(arr);
                for(int x=arr.length-1; x>=0; x--)
                {
                        if(isPrime(arr[x]))
                                System.out.print(arr[x]+" ");
                }
        }

        public static boolean isPrime(int num)
        {
                if(num==2 || num==3)
                        return true;
                for(int x=2; x<num; x++)
                {
                        if(num%x == 0)
                                return false;
                }
                return true;
        }
}


251 191 71 53 43 11 7 3 2

点评

和楼上有些相同!  发表于 2012-10-31 00:13

评分

参与人数 1技术分 +1 收起 理由
张榆 + 1 赞一个!

查看全部评分

回复 使用道具 举报
  1. package du;

  2. import java.util.ArrayList;
  3. import java.util.Arrays;
  4. import java.util.List;

  5. import org.junit.Test;

  6. public class Demo {
  7.         @Test
  8.         public void test() {
  9.                 int[] source = { 3, 9, 43, 25, 2, 4, 11, 71, 63, 53, 7, 251, 279,
  10.                                 191, 51, 39 };
  11.                 Arrays.sort(source);
  12.                 List<Integer> l=new ArrayList<Integer>();
  13.                 System.out.println("其中的素数是:");
  14.                 for(int i:source){
  15.                         if(isPrime(i)){
  16.                                 l.add(i);
  17.                                 System.out.print(i);
  18.                                 System.out.print(" ");
  19.                         }
  20.                 }
  21.                 System.out.println("\n从大到小排列结构为");
  22.                 for(int j=l.size()-1;j>=0;j--){
  23.                         System.out.print(l.get(j));
  24.                         System.out.print(" ");
  25.                 }
  26.         }
  27.         boolean isPrime(int num) {
  28.                 if (num == 2 || num == 3) {
  29.                         return true;
  30.                 }
  31.                 if (num % 6 != 1 && num % 6 != 5) {
  32.                         return false;
  33.                 }
  34.                 for (int i = 5; i * i <= num; i += 6) {
  35.                         if (num % i == 0 || num % (i + 2) == 0) {
  36.                                 return false;
  37.                         }
  38.                 }
  39.                 return true;
  40.         }
  41. }
复制代码
其中的素数是:
2 3 7 11 43 53 71 191 251
从大到小排列结构为
251 191 71 53 43 11 7 3 2

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 赞一个!

查看全部评分

回复 使用道具 举报
  1. public class TestPrime{
  2.         public static boolean isPrime(int num){
  3.                 if(num <2)
  4.                         return false;
  5.                 for(int i=2;i<=Math.sqrt(num);i++){
  6.                         if(num%i==0)
  7.                                 return false;
  8.                 }
  9.                 return true;
  10.         }
  11.         public static void sortArray(int a[]){
  12.                 int temp;
  13.                 for(int i=0; i<a.length-1; i++){
  14.                         for(int j=i+1; j<a.length; j++){
  15.                                 if(a[i]<a[j]){
  16.                                         temp =a[i];
  17.                                         a[i]=a[j];
  18.                                         a[j]=temp;
  19.                                 }
  20.                         }
  21.                 }
  22.         }        
  23.         public static void main(String[] args){
  24.                 int n[] ={3,9,43,25,2,4,1,71,63,53,7,251,279,191,51,39};               
  25.                 int j =0;
  26.                 //先排序再判断是否素数和输出。。这也可以的吧=,=
  27.                 sortArray(n);
  28.                 for(int i =0 ;i<n.length; i++)
  29.                 {
  30.                         if(isPrime(n[i])){                                
  31.                                 System.out.print(n[i]+" ");
  32.                                 }
  33.                 }               
  34.         }
  35. }
复制代码
输出结果:251 191 71 53 43 7 3 2

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 赞一个!

查看全部评分

回复 使用道具 举报
来凑凑热闹,{:soso_e142:}
  1. public class PrintSuShu {
  2. public static void main(String[] args) {
  3.       int[] source = {3,9,43,25,2,4,11,71,63,53,7,251,279,191,51,39};
  4.       int[] newSource = new int[9];//定义数组装素数,因为数组有个自带排序的方法
  5.       int count=0;
  6.       for(int x=0;x<source.length;x++){
  7.          int num = isPrime(source[x]);
  8.          if(num!=-1){//根据返回值来判断是否是素数
  9.              newSource[count]= num;
  10.              count++;
  11.          }
  12. }
  13. Arrays.sort(newSource);//数组自带的排序方法
  14.     for(int x=0;x<newSource.length;x++){//打印
  15.         System.out.print(newSource[x] + " ");
  16.     }
  17. }
  18. /*判断是否是素数的方法,如果是返回该数,如果不是返回-1*/
  19. public static int isPrime(int n){
  20.      for(int i=2;i<=n/2;i++){
  21.            if(n%i == 0)
  22.                return -1;
  23.      }
  24.     return n;
  25. }
  26. }
复制代码
得到结果是:
2 3 7 11 43 53 71 191 251

点评

其实你判断素数的代码可以在优化下,效率再高点  发表于 2012-10-29 20:20

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 赞一个!

查看全部评分

回复 使用道具 举报
  1. package test;

  2. public class Sushu
  3. {
  4.         public static void zhao(int[] arr )//找到素数
  5.         {
  6.                 System.out.print("素数为:");
  7.                 for (int a=0;a<arr.length;a++)
  8.                 {
  9.                         for (int x=2;x<arr[a];x++)
  10.                         {
  11.                                 if(arr[a]%x==0)
  12.                                         break;
  13.                                 if(x==arr[a]-1)
  14.                                         System.out.print(arr[a]+",");
  15.                         }
  16.                 }System.out.println();
  17.         }
  18.         public static void pao(int[] arr)//冒泡排序
  19.         {
  20.                 System.out.print("排序:");
  21.                 for (int x=0;x<arr.length-1 ;x++ )
  22.                 {
  23.                         for (int y=0;y<arr.length-x-1 ;y++ )
  24.                         {
  25.                                 if (arr[y]>arr[y+1])
  26.                                 {
  27.                                         int b=arr[y];
  28.                                         arr[y]=arr[y+1];
  29.                                         arr[y+1]=b;
  30.                                 }
  31.                         }
  32.                 }
  33.         }
  34.         public static void print(int[] arr)//打印
  35.         {
  36.                 System.out.print("[");
  37.                 for (int x=0;x<arr.length ;x++ )
  38.                 {
  39.                         System.out.print(arr[x]);
  40.                         if (x!=arr.length-1)
  41.                                 System.out.print(",");
  42.                 }
  43.                 System.out.println("]");
  44.         }
  45.         public static void main(String[] args)
  46.         {
  47.                 int arr[]={3,9,43,25,2,4,11,71,63,53,7,251,279,191,51,39};
  48.                 print(arr);
  49.                 zhao(arr);
  50.                 pao(arr);
  51.                 print(arr);
  52.         }
  53. }
  54.        
复制代码
我也来了

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 赞一个!

查看全部评分

回复 使用道具 举报
马磊 中级黑马 2012-10-29 18:17:38
13#

  1. import java.util.Comparator;
  2. import java.util.TreeSet;

  3. public class PrimeNumberSort {

  4.     /*
  5.      *要求:给出16个数:3,9,43,25,2,4,11,71,63,53,7,251,279,191,51,39
  6.            找出其中的素数,并按从大到小的顺序输出。
  7.      */
  8.     public static void main(String[] args) {
  9.         //定义数组存放16个数
  10.         int[] arr = {3,9,43,25,2,4,11,71,63,53,7,251,279,191,51,39};
  11.         //定义一个TreeSet用于存放素数,因为TreeSet是有序的,所以可以使用其排序,MyComparator为自定义的排序顺序
  12.         TreeSet<Integer> ts = new TreeSet<Integer>(new MyComparator());
  13.         
  14.         
  15.         for (int i = 0; i < arr.length; i++) {//遍历数组
  16.             for (int j = 2; j <=Math.sqrt(arr[i])+1; j++) { //判断数组中的元素能否从2到它的平方根的数整除
  17.                 if(arr[i]==2)  //数组中元素是2的话,它直接就是素数了
  18.                     ts.add(arr[i]);  //把2放入TreeSet
  19.                 else if(arr[i]%j==0)  //能被整除,证明它不是素数,终止本轮循环
  20.                     break;
  21.                 if (j > Math.sqrt(arr[i])) { //从2到这个元素的平方根,都没有能数能整除这个元素,证明它是素数
  22.                     ts.add(arr[i]);
  23.                 }
  24.             }
  25.         }
  26.         System.out.println(ts.toString()); //打印最后的结果
  27.     }
  28. }


  29. //自定义TreeSet里的比较方法
  30. class MyComparator implements Comparator<Integer>{  

  31.     @Override
  32.     public int compare(Integer o1, Integer o2) {  
  33.         return o2-o1; //TreeSet里默认是从小到大排列,比较的是o1-o2,用o2-o1使其从大到小排列
  34.     }
  35. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 赞一个!

查看全部评分

回复 使用道具 举报
徐强 中级黑马 2012-10-29 18:02:06
12#
public class Prime {

        /**
         * 给出16个数:3,9,43,25,2,4,11,71,63,53,7,251,279,191,51,39
     *     找出其中的素数,并按从大到小的顺序输出      
         */
        public static void main(String[] args) {

                //已知的16个数
                int a[]={3,9,43,25,2,4,11,71,63,53,7,251,279,51,39};
                //筛选10000以内的素数
                final int MAX = 10000;
                final int NSQR = 1000;
                //定义arr数组来表示筛选出来的素数
                int arr[] = new int[MAX];

                //arr数组坐标i不是素数的话就令arr[i]=1
                for(int k=2;k<NSQR;k++){
                        if(arr[k]==0){
                                for(int i=2*k;i<MAX;i+=k){
                                        arr[i] = -1;
                                }
                        }
                }

                //arr[i]==0的话 i就是素数  当arr[a[i]]==0时 a[i]就是素数
                for(int i=0;i<a.length;i++){
                        if(arr[a[i]]==0){
                                arr[a[i]] = a[i];
                        }
                }
                //查找出arr[i]中大于1的值,这些值刚好是数组a中的素数,并按大小排序。
                for(int i=0;i<arr.length ;i++){
                        if(arr[i]>=1){
                                System.out.print(arr[i]+"\t");
                        }
                }

        }

}


点评

总共就十六个数,你搞那么大,而且还有嵌套循环,你有没有考虑效率问题,你要到什么时候才循环完呢,希望你能改改  发表于 2012-10-29 18:27

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 鼓励下

查看全部评分

回复 使用道具 举报
王振 中级黑马 2012-10-29 17:50:26
11#
本帖最后由 王振 于 2012-10-29 19:02 编辑
  1. import java.util.ArrayList;
  2. import java.util.Arrays;

  3. public class day1029 {

  4.         public static void main(String[] args) {
  5.                 //创建数组。
  6.                 int[] array = {3,9,43,25,2,4,11,71,63,53,7,251,279,191,51,39};
  7.                 //创建ArrayList对象。
  8.                 ArrayList<Integer> al = new ArrayList<Integer>();
  9.                
  10.                 //遍历需要判断的数组,调用isSuShu()判断是否为素数。素数添加到ArrayList
  11.                 for(int i=0; i<array.length; i++) {
  12.                         if(isSuShu(array[i])) {
  13.                                 al.add(array[i]);
  14.                         }
  15.                 }
  16.                 //创建Integer数组。
  17.                 Integer[] arr = new Integer[al.size()];
  18.                 //将ArrayList中的元素转换到Integer数组中。
  19.                 arr = al.toArray(arr);
  20.                 //排序。
  21.                 Arrays.sort(arr);
  22.                 //打印。
  23.                 print(arr);
  24.         }
  25.         
  26.         //判断是否为素数。
  27.         public static boolean isSuShu(int m) {
  28.                 int mid = (int)Math.sqrt(m);
  29.                 if(m == 1) {
  30.                         return false;
  31.                 }
  32.                 for(int i=2; i<=mid; i++) {
  33.                         if(m % i == 0) {
  34.                                 return false;
  35.                         }
  36.                 }
  37.                 return true;
  38.         }
  39.         //打印数组。
  40.         public static void print(Integer[] arr) {
  41.                 System.out.print("[");
  42.                 for(int i=0; i<arr.length; i++) {
  43.                         if(i!=arr.length-1) {
  44.                                 System.out.print(arr[i] + ",");
  45.                         } else {
  46.                                 System.out.print(arr[i]);
  47.                         }
  48.                 }
  49.                 System.out.print("]");
  50.         }

  51. }
复制代码

点评

你可以考虑提高判断素数的效率  发表于 2012-10-29 18:25

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 赞一个!

查看全部评分

回复 使用道具 举报
梁枝武 发表于 2012-10-29 16:48
看看这个行不行

你要不要适当的加点注释
回复 使用道具 举报
本帖最后由 梁枝武 于 2012-10-29 18:36 编辑

  1. package com.itheima;

  2. public class Test {
  3.         public static void main(String[] args){
  4.                 int j,k,n=0;
  5.                 int[] b=new int[10];
  6.                 int[] arr = {3,9,43,25,2,4,11,71,63,53,7,251,279,191,51,39};
  7.                 for(int i=0;i<arr.length;i++)
  8.         {
  9.                 k=(int) Math.sqrt(arr[i]);
  10.                 for( j=2;j<=k;j++)
  11.                         if(arr[i]%j==0) break;//判断是否素数
  12.                         if(j>k)
  13.                         {
  14.                         b[n]=arr[i]; //存放素数
  15.                         n++;
  16.                         }
  17.                         
  18.             }
  19.                
  20.                 System.out.print("所有的素数为:");
  21.                 for(int i = 0;i<n;i++)
  22.                         
  23.                         System.out.print(" "+b[i]);
  24.                
  25.                 for(int i=0;i<n-1;i++){
  26.                         for( j=i+1;j<n;j++){
  27.                                 if(b[i]>b[j]){
  28.                                         int temp = b[i];
  29.                                         b[i] = b[j];
  30.                                         b[j] = temp;
  31.                                 }
  32.                         }
  33.                 }
  34.         

  35.                 System.out.println("");
  36.                 System.out.print("小到大排序为:");        
  37.                 for(int i = 0;i<n;i++)
  38.                 System.out.print(" "+b[i]);
  39.                         
  40.                
  41.         
  42.         }
  43.         
  44.         
  45. }


复制代码
运行结果为:
所有的素数为: 3 43 2 11 71 53 7 251 191
小到大排序为: 2 3 7 11 43 53 71 191 251


评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 不过鼓励下,以后记得程序的可读性.

查看全部评分

回复 使用道具 举报
javasrcipt可以吗!!

点评

都可以的,我觉得难了,我和她商量看着改下吧  发表于 2012-10-29 16:13
回复 使用道具 举报
请问一下 题目是否要求每个魔方中的数 各不相同?

点评

是的,相同的话就很简单了,一个素数就行了  发表于 2012-10-29 14:02
回复 使用道具 举报
头痛……
回复 使用道具 举报
占个楼先,算法先想想
回复 使用道具 举报
樊鹏飞 发表于 2012-10-29 12:04
真好 真好

小樊子,近来可好啊……
回复 使用道具 举报
没点思路啊!!  得求教黄老邪去了。。。
回复 使用道具 举报
真好 真好

点评

啊??那你的代码捏?  发表于 2012-10-29 12:07
回复 使用道具 举报

回帖奖励 +1

占个楼!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马