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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. package itheima;

  2. import java.util.Arrays;

  3. public class Sushu {

  4.         public static void main(String[] args) {
  5.                 System.out.println("-------------第一题--------------");
  6.                 int sum = 0;
  7.                 //因为1不是素数也不是合数,所以从2开始判断
  8.                 for(int i = 2; i <= 100; i++) {
  9.             //如果是素数就进行累加
  10.                         if(isPrime(i)) {
  11.                 sum+=i;
  12.             }
  13.         }     
  14.                 System.out.println("1~100的素数和:"+sum);
  15.                 System.out.println("-------------第二题--------------");       
  16.                 int [] arrs = {2,5,9,10,48,95,154,31,59,69};               
  17.                 //打印数组改变前内容
  18.                 System.out.println("数组改变前:"+Arrays.toString(arrs));
  19.                 //数组排序
  20.                 Arrays.sort(arrs);
  21.                 //遍历数组
  22.                 for(int i = 0;i<arrs.length;i++){
  23.                         //遍历数组,如果是素数,就将其赋值为0
  24.                         if(isPrime(arrs[i])){
  25.                                 arrs[i]=0;
  26.                         }                       
  27.                 }       
  28.                 //打印数组改变后内容
  29.                 System.out.println("数组改变后:"+Arrays.toString(arrs));
  30.                
  31.                 //打印阶梯状数组
  32.                 for(int i = 0;i<arrs.length;i++){
  33.                         for(int j = 0;j<i;j++)
  34.                                 System.out.print("  ");
  35.                         System.out.println(arrs[i]);
  36.                 }
  37.         }
  38.         //判断是否为素数的方法,返回值为boolean
  39.         public static boolean isPrime(int num) {          
  40.                 //把一个数开方,得到该数可能被整除的取值范围:2~该数的开方值
  41.                for(int i = 2; i <= Math.sqrt(num); i++) {
  42.                        //如果能被整除,就不是素数
  43.                    if(num % i == 0) {
  44.                      return false;
  45.                    }   
  46.                }
  47.                //否则不能被整除,即是素数
  48.                return true;
  49.             }
  50. }
复制代码

QQ截图20130622130455.png (8.72 KB, 下载次数: 0)

QQ截图20130622130455.png

评分

参与人数 1技术分 +5 收起 理由
夜默 + 5

查看全部评分

回复 使用道具 举报
不好意思啊,第二题因为疏忽,判断条件写反了,这是修正好的代码和结果!!!
  1. package itheima;

  2. import java.util.Arrays;

  3. public class Sushu {

  4.         public static void main(String[] args) {
  5.                 System.out.println("-------------第一题--------------");
  6.                 int sum = 0;
  7.                 //因为1不是素数也不是合数,所以从2开始判断
  8.                 for(int i = 2; i <= 100; i++) {
  9.             //如果是素数就进行累加
  10.                         if(isPrime(i)) {
  11.                 sum+=i;
  12.             }
  13.         }     
  14.                 System.out.println("1~100的素数和:"+sum);
  15.                 System.out.println("-------------第二题--------------");       
  16.                 int [] arrs = {2,5,9,10,48,95,154,31,59,69};               
  17.                 //打印数组改变前内容
  18.                 System.out.println("数组改变前:"+Arrays.toString(arrs));
  19.                 //数组排序
  20.                 Arrays.sort(arrs);
  21.                 //遍历数组
  22.                 for(int i = 0;i<arrs.length;i++){
  23.                         //遍历数组,如果是素数,就将其赋值为0
  24.                         if(isPrime(arrs[i])){
  25.                                
  26.                         }else{
  27.                                 arrs[i]=0;
  28.                         }               
  29.                 }       
  30.                 //打印数组改变后内容
  31.                 System.out.println("数组改变后:"+Arrays.toString(arrs));
  32.                
  33.                 //打印阶梯状数组
  34.                 for(int i = 0;i<arrs.length;i++){
  35.                         for(int j = 0;j<i;j++)
  36.                                 System.out.print("  ");
  37.                         System.out.println(arrs[i]);
  38.                 }
  39.         }
  40.         //判断是否为素数的方法,返回值为boolean
  41.         public static boolean isPrime(int num) {          
  42.                 //把一个数开方,得到该数可能被整除的取值范围:2~该数的开方值
  43.                for(int i = 2; i <= Math.sqrt(num); i++) {
  44.                        //如果能被整除,就不是素数
  45.                    if(num % i == 0) {
  46.                      return false;
  47.                    }   
  48.                }
  49.                //否则不能被整除,即是素数
  50.                return true;
  51.             }
  52. }
复制代码

QQ截图20130622130903.png (7.28 KB, 下载次数: 0)

QQ截图20130622130903.png

点评

素数赋值为零,你又改错了,看清题...别回复了..  发表于 2013-6-22 13:17
回复 使用道具 举报
我今天上午刚看到的,三道题都写了

  1. import java.util.Scanner;

  2. class GetPrimeNumber {

  3.         /**
  4.          * @param args
  5.          *
  6.          * 1.  打印输出一百以内的素数的累加和...  
  7.      * 2.将该数组由小到大进行排列,数组中的素数全部赋值为零,并 按阶梯状输出。
  8.      *  数组:  2   5    9    10   48     95   154     31  59    69
  9.      * 3.手动输入一个自然数N,反向打印N行杨辉三角。
  10.          */
  11.        
  12.         private static int sum = 0;//定义全局变量素数和 sum
  13.         private static int arr[]={2,5,9,10,48,95,154,31,59,69};//定义并初始化数组
  14.         private static int rownum = 0;//定义杨辉三角的行数rownum
  15.         public static void main(String[] args) {
  16.                 // TODO Auto-generated method stub
  17.                 getPrimeNumSum();//获取100以内的素数累加和
  18.                 printNewNum();//重新排列输出
  19.                 printTriangle();//反向打印杨辉三角
  20.                
  21.         }
  22.         private static void getPrimeNumSum()
  23.         {
  24.                 for(int i=2;i<100;i++)
  25.                 {
  26.                         if(i == 2 || i==3)//将2、3 两个特殊的数单列出来
  27.                         {
  28.                                 System.out.println(i+"是素数");
  29.                                 sum += i;
  30.                         }       
  31.                         for(int j=2;j<Math.sqrt(i);j++)
  32.                         {
  33.                                 //如果除了1和它本身两个约数外,还有别的约数,那么这个数就不是素数
  34.                                
  35.                                 if(i%j==0 )
  36.                                 {
  37.                                         break;
  38.                                 }  
  39.                                
  40.                                 //如果除了1和它本身两个约数外,没有别的约数,那么这个数就是素数
  41.                                 //加上j> Math.sqrt(i)-1)是为了限制计算和打印只进行一次
  42.                                 else if((i%j != 0) && (j > Math.sqrt(i)-1) )
  43.                                 {
  44.                                         System.out.println(i+"是素数");
  45.                                         sum += i;
  46.                                 }
  47.                         }
  48.                        
  49.                        
  50.                 }
  51.                
  52.                 System.out.println("100以内的素数之和是:"+sum);
  53.         }
  54.         // 数组:  2   5    9    10   48     95   154     31  59    69
  55.         private static void printNewNum()
  56.         {
  57.                
  58.                 for(int k = 0;k < arr.length;k++)//判别数据是否是素数,并将数组中的素数改变为0
  59.                 {       
  60.                         if(arr[k]==2 || arr[k]==3)
  61.                         {
  62.                                 arr[k] = 0;                               
  63.                         }
  64.                         else
  65.                         {
  66.                                 for(int kk = 2;kk <Math.sqrt(arr[k]);kk++)
  67.                                 {
  68.                                         if(arr[k] % kk == 0)//如果有其他约数,则跳出循环
  69.                                                 break;
  70.                                        
  71.                                         else if(arr[k]%kk !=0 && kk>Math.sqrt(arr[k])-1)//如果是素数,则将其数值修改为0
  72.                                                 arr[k] = 0;
  73.                                 }
  74.                        
  75.                         }
  76.                        
  77.                 }
  78.                 for (int ii = 0;ii<arr.length;ii++)//打印数据
  79.                         for(int jj = 0 ;jj <=ii ;jj++)
  80.                                 if(jj == ii)
  81.                                         System.out.println(arr[ii]);//对角线形式打印并换行
  82.                                 else
  83.                                         System.out.print(" ");//打印空格
  84.                                        
  85.         }
  86.         private static int getRow()
  87.         {
  88.                 Scanner sc = new Scanner(System.in);// 获取输入数字
  89.                  try
  90.                  {
  91.                          rownum = sc.nextInt();
  92.                          while(rownum<1)//数据合法性判断
  93.                      {
  94.                              System.out.println("输入的数据大小不合法,请重新输入:");
  95.                              rownum = sc.nextInt();
  96.                      }
  97.                  }
  98.                  catch(Exception e)
  99.                  {
  100.                          System.out.println("输入数据不合法,出现异常:"+e.toString());
  101.                          System.out.println("请重新输入一个正整数:");
  102.                          getRow();                       
  103.                  }                         
  104.                  return rownum;
  105.                
  106.         }
  107.         //反向打印杨辉三角 组合数开始结束部分采用定义的格式打印1 中间部分采用定义的方法计算出相应的数值并打印出来
  108.         private static void  printTriangle()
  109.         {
  110.                 System.out.println("请输入杨辉三角的行数:");
  111.                  rownum= getRow();
  112.                  //System.out.println(rownum);
  113.                 for(int row = 1;row < rownum+1 ;row++)
  114.                         {
  115.                                 for(int col=1;col<=2*rownum-row ;col++)
  116.                                
  117.                                 {
  118.                                         if(row == 1 && col%2 == 0)
  119.                                                 System.out.print(" ");
  120.                                         else if(col == row || col == 2*rownum-row)//每行的开始、结束部分都是1
  121.                                                 System.out.print(1);
  122.                                        
  123.                                         else if (col>row && col <2*rownum-row && col % row == 0 )
  124.                                         {
  125.                                                 //求分子
  126.                                                 int numerator =getFactorial(rownum-row);
  127.                                                 //求分母
  128.                                                 int denominator = getFactorial(rownum-row-(col-1)/2)*getFactorial((col-1)/2);
  129.                                                 //System.out.print(numerator+" "+denominator);
  130.                                                 System.out.print(numerator/denominator);
  131.                                         }
  132.                                         else
  133.                                                 System.out.print(" ");
  134.                                 }
  135.                                 System.out.println();
  136.                         }       
  137.         }
  138.         private static int getFactorial(int n)//求n的阶乘
  139.         {
  140.                 if(n==1)
  141.                         return 1;
  142.                 else if(n>1)
  143.                         return(n* getFactorial(n-1));
  144.                 else
  145.                         System.out.println("参数有误!");
  146.                 return -1;
  147.                
  148.         }
  149.        

  150. }
复制代码

点评

结果....  发表于 2013-6-22 13:18
回复 使用道具 举报
  1. /*3.倒序杨辉三角*/
  2. import java.util.ArrayList;
  3. public class Test3 {
  4.         public static void main(String[] args) {
  5.                 int layers =4;
  6.                 //Step1. 产生杨辉三角列表
  7.                 ArrayList<ArrayList<Integer>> yanghuiTrList = generateYangTrList(layers);
  8.                 System.out.println("产生的杨辉列表如下:");
  9.                 printYanghuiList(yanghuiTrList);
  10.                
  11.                 //Step2.倒序打印杨辉三角
  12.                 System.out.println("倒序打印杨辉三角如下:");
  13.                 printInverseYanghuiArr(layers, yanghuiTrList);
  14.         }
  15.        
  16.         /**
  17.          * function: 倒序打印杨辉三角
  18.          * @param layers ---表示杨辉三角的层数
  19.          * @param yanghuiTrList ----杨辉三角的列表
  20.          */
  21.         private static void printInverseYanghuiArr(int layers,
  22.                         ArrayList<ArrayList<Integer>> yanghuiTrList) {
  23.                 //Step1. 控制打印的行数
  24.                 for(int i=1, layer =layers-1; i<=layers; i++, layer--){
  25.                         //先打印空格部分  填充空白区域
  26.                         for(int j=1; j<= i-1; j++){
  27.                                 System.out.print(" ");
  28.                         }
  29.                        
  30.                         //取出本层的杨辉数字列表
  31.                         ArrayList<Integer> eachLayerList =yanghuiTrList.get(layer);
  32.                        
  33.                         int index =0;
  34.                         for(int j=1; j<=9 -2*i; j++){
  35.                                 if(j%2 ==0)//隔一位打印一个数字
  36.                                         System.out.print(" ");
  37.                                 else{
  38.                                         System.out.print(eachLayerList.get(index));
  39.                                         index++;
  40.                                 }
  41.                         }
  42.                         System.out.println();
  43.                 }
  44.         }
  45.        
  46.         //打印杨辉列表  -- 测试使用
  47.         private static void printYanghuiList(
  48.                         ArrayList<ArrayList<Integer>> yanghuiTrList) {
  49.                
  50.                 for(int i=0; i<yanghuiTrList.size(); i++){
  51.                         for(int j=0; j<yanghuiTrList.get(i).size(); j++){
  52.                                 System.out.print(yanghuiTrList.get(i).get(j)+ " ");
  53.                         }
  54.                         System.out.println();
  55.                 }
  56.                
  57.         }

  58.         //产生杨辉三角列表  方法的参数表示产生几层杨辉三角
  59.         private static ArrayList<ArrayList<Integer>> generateYangTrList(int layers) {
  60.                 ArrayList<ArrayList<Integer>> trList =new ArrayList<ArrayList<Integer>>();
  61.                 ArrayList<Integer> eachLayerList =null;
  62.                 //顺序产生各层杨辉列表
  63.                 for(int i=0; i<layers; i++){
  64.                         eachLayerList =new ArrayList<Integer>();
  65.                        
  66.                         //第0层杨辉列表: 1
  67.                         if(i==0){
  68.                                 eachLayerList.add(1);
  69.                                 trList.add(eachLayerList);
  70.                                 continue;
  71.                         }
  72.                        
  73.                         //第1层杨辉列表: 1  1
  74.                         if(i==1){
  75.                                 eachLayerList.add(1);
  76.                                 eachLayerList.add(1);
  77.                                 trList.add(eachLayerList);
  78.                                 continue;
  79.                         }
  80.                        
  81.                         //第0, 1层以外的杨辉列表
  82.                         //--每层杨辉列表的首数字都为1
  83.                         eachLayerList.add(1);
  84.                        
  85.                         //取出最后一次的杨辉列表  一共下面累加获得本层的杨辉列表的元素
  86.                         ArrayList<Integer> lastList =trList.get(trList.size()-1);
  87.                        
  88.                         //累加上一层的相邻两个元素进行求和
  89.                         for(int startIndex =0; startIndex <lastList.size() -1; startIndex++){
  90.                                 int adjacentSum =lastList.get(startIndex)+ lastList.get(startIndex+1);
  91.                                 eachLayerList.add(adjacentSum);
  92.                         }
  93.                         //--每层杨辉列表的尾数字都为1
  94.                         eachLayerList.add(1);
  95.                        
  96.                         trList.add(eachLayerList);
  97.                 }
  98.                 return trList;
  99.         }
  100. }
复制代码
结果:
产生的杨辉列表如下:
1
1 1
1 2 1
1 3 3 1
倒序打印杨辉三角如下:
1 3 3 1
1 2 1
  1 1
   1
  1. /*2. 将该数组由小到大进行排列,数组中的素数全部赋值为零,并 按阶梯状输出。*/

  2. public class Test2 {
  3.         public static void main(String[] args) {
  4.                 int[] arrs ={2, 5, 9, 10, 48, 95, 154, 31, 59, 69};
  5.                 //对数组进行排序 ---采用选择排序
  6.                 selectSort(arrs);
  7.                 System.out.print("数组改变前:");
  8.                
  9.                 printArry(arrs);
  10.                
  11.                 //对数组中的每一个数进行素数检测  并置换为0
  12.                 primeIsZero(arrs);
  13.                 System.out.println();
  14.                 System.out.print("数组改变后:");
  15.                
  16.                 printArry(arrs);
  17.                
  18.                 // 阶梯状打印数组元素
  19.                 PrintArry1(arrs);
  20.         }
  21.        
  22.         //阶梯状打印数组元素
  23.         private static void PrintArry1(int[] arr) {
  24.                
  25.                 //外层循环控制打印的行数
  26.                
  27.                 for(int i=0; i< arr.length; i++){
  28.                         for(int j=1; j<=i+1; j++){
  29.                                
  30.                                 if(i==j)
  31.                                         System.out.print(arr[i]);
  32.                                 else
  33.                                         System.out.print(" ");
  34.                         }
  35.                         System.out.println();
  36.                 }
  37.         }

  38.         //打印数组元素
  39.         private static void printArry(int[] arr) {
  40.                 for(int x: arr){
  41.                         System.out.print(x +" ");
  42.                 }
  43.         }
  44.        
  45.         //对数组中的素数进行清零
  46.         private static void primeIsZero(int[] arr) {
  47.                 for(int x =0; x<arr.length; x++){
  48.                         if(isPrime(arr[x]))//是素数  元素清零
  49.                                 arr[x] =0;
  50.                 }
  51.         }
  52.        
  53.         //判断一个数是否为素数
  54.         private static boolean isPrime(int num) {
  55.                 boolean isPrime =true;
  56.                
  57.                 for(int i=2; i<num; i++){
  58.                         if(num%i==0){
  59.                                 isPrime =false;
  60.                                
  61.                                 break;
  62.                         }
  63.                        
  64.                         isPrime =true;
  65.                 }
  66.                 return isPrime;
  67.         }

  68.         //对数组进行选择排序
  69.         private static void selectSort(int[] arr) {
  70.                
  71.                 for(int i =0; i< arr.length-1; i++){
  72.                        
  73.                         for(int j =i+1; j <arr.length; j++){
  74.                                
  75.                                 if(arr[i] >arr[j])
  76.                                         swap(i, j, arr);
  77.                         }
  78.                 }
  79.         }

  80.         //交换数组中两个元素的位置
  81.         private static void swap(int i, int j, int[] arr) {
  82.                 int temp =arr[i];
  83.                 arr[i] =arr[j];
  84.                 arr[j] =temp;
  85.         }
  86. }
复制代码
结果:
数组改变前:2 5 9 10 31 48 59 69 95 154
数组改变后:0 0 9 10 0 48 0 69 95 154  
0
9
  10
   0
    48
     0
      69
       95
        154
  1. /*1. 题目打印输出一百以内的素数的累加和...*/

  2. /*
  3. * 思路:
  4. * 素数是指,在一个大于1的自然数中,除了1和此整数自身外,不能被其他自然数整除的数
  5. * 首先利用循环(1-100)检验每一个数是否是素数
  6. *                  如果是  累加到一个表示和的变量里面
  7. * */
  8. public class Test1 {
  9.         public static void main(String[] args) {
  10.                 //素数的定义是除了1以外,所以在1~100之间,最小值为2,最大值为100
  11.                 int min =2;
  12.                 int max =100;
  13.                
  14.                 //定义变量isPrime,当为true时为素数
  15.                 boolean isPrime =true;
  16.                
  17.                 //所有素数的和的变量
  18.                 int sum =0;
  19.                 //外层循环用:
  20.                         //--来检测给定范围的数有哪些是素数
  21.                 System.out.println("("+ min+ ", "+max+")的素数有:");
  22.                 for(int i=min; i<=max; i++){
  23.                        
  24.                         for(int j=2; j<i; j++){
  25.                                 if(i%j==0){ //如果能被整除 整除标记isPrime标记为false  表示不是素数
  26.                                         isPrime =false;
  27.                                        
  28.                                         break;
  29.                                 }
  30.                                
  31.                                 isPrime =true;
  32.                         }
  33.                        
  34.                         if(isPrime){
  35.                                 sum += i;
  36.                                 System.out.print(i +" ");
  37.                         }
  38.                 }
  39.                 System.out.println();
  40.                 System.out.println("("+ min+ ", "+max+")的素数的和是:"+ sum);
  41.         }
  42. }
复制代码
结果:
(2, 100)的素数有:
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
(2, 100)的素数的和是:1060

评分

参与人数 1技术分 +5 收起 理由
夜默 + 5

查看全部评分

回复 使用道具 举报
xiaohu1218 发表于 2013-6-22 13:13
我今天上午刚看到的,三道题都写了

不好意思,忘了贴了,刚才发现我的第三题有点Bug,修改了一下,现在把所有正式的程序和结果都重新贴上来,辛苦版主了

  1. import java.util.Scanner;

  2. class GetPrimeNumber {

  3.         /**
  4.          * @param args
  5.          *
  6.          * 1.  打印输出一百以内的素数的累加和...  
  7.      * 2.将该数组由小到大进行排列,数组中的素数全部赋值为零,并 按阶梯状输出。
  8.      *  数组:  2   5    9    10   48     95   154     31  59    69
  9.      * 3.手动输入一个自然数N,反向打印N行杨辉三角。
  10.          */
  11.        
  12.         private static int sum = 0;//定义全局变量素数和 sum
  13.         private static int arr[]={2,5,9,10,48,95,154,31,59,69};//定义并初始化数组
  14.         private static int rownum = 0;//定义杨辉三角的行数rownum
  15.         public static void main(String[] args) {
  16.                 // TODO Auto-generated method stub
  17.                 getPrimeNumSum();//获取100以内的素数累加和
  18.                 printNewNum();//重新排列输出
  19.                 printTriangle();//反向打印杨辉三角
  20.                
  21.         }
  22.         private static void getPrimeNumSum()
  23.         {
  24.                 for(int i=2;i<100;i++)
  25.                 {
  26.                         if(i == 2 || i==3)//将2、3 两个特殊的数单列出来
  27.                         {
  28.                                 System.out.println(i+"是素数");
  29.                                 sum += i;
  30.                         }       
  31.                         for(int j=2;j<Math.sqrt(i);j++)
  32.                         {
  33.                                 //如果除了1和它本身两个约数外,还有别的约数,那么这个数就不是素数
  34.                                
  35.                                 if(i%j==0 )
  36.                                 {
  37.                                         break;
  38.                                 }  
  39.                                
  40.                                 //如果除了1和它本身两个约数外,没有别的约数,那么这个数就是素数
  41.                                 //加上j> Math.sqrt(i)-1)是为了限制计算和打印只进行一次
  42.                                 else if((i%j != 0) && (j > Math.sqrt(i)-1) )
  43.                                 {
  44.                                         System.out.println(i+"是素数");
  45.                                         sum += i;
  46.                                 }
  47.                         }
  48.                        
  49.                        
  50.                 }
  51.                
  52.                 System.out.println("100以内的素数之和是:"+sum);
  53.         }
  54.         // 数组:  2   5    9    10   48     95   154     31  59    69
  55.         private static void printNewNum()
  56.         {
  57.                
  58.                 for(int k = 0;k < arr.length;k++)//判别数据是否是素数,并将数组中的素数改变为0
  59.                 {       
  60.                         if(arr[k]==2 || arr[k]==3)
  61.                         {
  62.                                 arr[k] = 0;                               
  63.                         }
  64.                         else
  65.                         {
  66.                                 for(int kk = 2;kk <Math.sqrt(arr[k]);kk++)
  67.                                 {
  68.                                         if(arr[k] % kk == 0)//如果有其他约数,则跳出循环
  69.                                                 break;
  70.                                        
  71.                                         else if(arr[k]%kk !=0 && kk>Math.sqrt(arr[k])-1)//如果是素数,则将其数值修改为0
  72.                                                 arr[k] = 0;
  73.                                 }
  74.                        
  75.                         }
  76.                        
  77.                 }
  78.                 for (int ii = 0;ii<arr.length;ii++)//打印数据
  79.                         for(int jj = 0 ;jj <=ii ;jj++)
  80.                                 if(jj == ii)
  81.                                         System.out.println(arr[ii]);//对角线形式打印并换行
  82.                                 else
  83.                                         System.out.print(" ");//打印空格
  84.                                        
  85.         }
  86.         private static int getRow()
  87.         {
  88.                 Scanner sc = new Scanner(System.in);// 获取输入数字
  89.                  try
  90.                  {
  91.                          rownum = sc.nextInt();
  92.                          while(rownum<1)//数据合法性判断
  93.                      {
  94.                              System.out.println("输入的数据大小不合法,请重新输入:");
  95.                              rownum = sc.nextInt();
  96.                      }
  97.                  }
  98.                  catch(Exception e)
  99.                  {
  100.                          System.out.println("输入数据不合法,出现异常:"+e.toString());
  101.                          System.out.println("请重新输入一个正整数:");
  102.                          getRow();                       
  103.                  }                         
  104.                  return rownum;
  105.                
  106.         }
  107.         //反向打印杨辉三角 组合数开始结束部分采用定义的格式打印1 中间部分采用定义的方法计算出相应的数值并打印出来
  108.         private static void  printTriangle()
  109.         {
  110.                 System.out.println("请输入杨辉三角的行数:");
  111.                  rownum= getRow();
  112.                  //System.out.println(rownum);
  113.                 for(int row = 1;row < rownum+1 ;row++)
  114.                         {
  115.                                 for(int col=1;col<=2*rownum-row ;col++)
  116.                                
  117.                                 {
  118.                                         if(row == 1 && col%2 == 0)
  119.                                                
  120.                                                 {
  121.                                                         System.out.print(" ");
  122.                                                         continue;
  123.                                                
  124.                                                 }
  125.                                         else if(col == row || col == 2*rownum-row)//每行的开始、结束部分都是1
  126.                                                 {
  127.                                                         System.out.print(1);
  128.                                                         continue;
  129.                                                 }
  130.                                        
  131.                                         else if (col>row && col <2*rownum-row && (col-row) %2  == 0 )
  132.                                         {
  133.                                                 //求分子
  134.                                                 if((rownum-row-(col-row)/2)>=0 && (col-row)/2>=0)
  135.                                                         {
  136.                                                         int numerator =getFactorial(rownum-row);
  137.                                                         int denominator = getFactorial(rownum-row-(col-row)/2)*getFactorial((col-row)/2);
  138.                                                         System.out.print(numerator/denominator);
  139.                                                         continue;
  140.                                                         }
  141.                                                 //求分母
  142.                                                                                                
  143.                                         }                               
  144.                                        
  145.                                         else
  146.                                                 System.out.print(" ");
  147.                                 }
  148.                                 System.out.println();
  149.                         }       
  150.         }
  151.         private static int getFactorial(int n)//求n的阶乘
  152.         {
  153.                 if(n==1 || n==0)
  154.                         return 1;
  155.                 else if(n>1)
  156.                         return(n* getFactorial(n-1));
  157.                 else
  158.                         System.out.println("参数有误!");
  159.                 return -1;
  160.                
  161.         }
  162.        

  163. }
复制代码
运行结果如下:
2是素数
3是素数
5是素数
7是素数
11是素数
13是素数
17是素数
19是素数
23是素数
29是素数
31是素数
37是素数
41是素数
43是素数
47是素数
53是素数
59是素数
61是素数
67是素数
71是素数
73是素数
79是素数
83是素数
89是素数
97是素数
100以内的素数之和是:1060
0
0
  9
   10
    48
     95
      154
       0
        0
         69
请输入杨辉三角的行数:
5
1 4 6 4 1
1 3 3 1
  1 2 1
   1 1
    1

评分

参与人数 1技术分 +5 收起 理由
夜默 + 5

查看全部评分

回复 使用道具 举报

第一题结果:
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
素数和为:1061
第二题的结果:
C:\Users\Administrator\Desktop

点评

结果不对...  发表于 2013-6-22 15:38
回复 使用道具 举报
  1. int length = 0; //杨辉三角形的长度

  2.                         Console.Write("输入杨辉三角长度");
  3.                         length = Convert.ToInt32(Console.ReadLine()); //指定杨辉三角的长度

  4.                         if (length <= 13)
  5.                         {
  6.                                 int[][] a = new int[length][]; //二维数组
  7.                                 for (int i = 0; i < a.Length; i++)
  8.                                 {
  9.                                         a[i] = new int[i + 1];//遍历,赋值增量
  10.                                 }
  11.                                 for (int j = 0; j < a.Length; j++)
  12.                                 {
  13.                                         a[j][0] = 1; //把第一列的元素都赋1
  14.                                         a[j][j] = 1;//把第一列最右边的元素都赋1
  15.                                         for (int m = 1; m < a[j].Length - 1; m++)
  16.                                         {
  17.                                                 a[j][m] = a[j - 1][m - 1] + a[j - 1][m];//其余的值由杨辉公式计算
  18.                                         }
  19.                                 }
  20.                                 for (int i = a.Length - 1; i >= 0; i--)//遍历数组输出杨辉三角形
  21.                                 {
  22.                                         for (int b = 0; b < a.Length - a[i].Length; b++)
  23.                                         {
  24.                                                 Console.Write("\0");  //输出空格
  25.                                         }
  26.                                         for (int j = a[i].Length-1; j >= 0; j--)
  27.                                         {
  28.                                                 Console.Write("{0}\0", a[i][j]);
  29.                                         }
  30.                                         Console.Write("\n");  //换行
  31.                                        
  32.                                 }
  33.                                         Console.Read();
  34.                         }
复制代码
回复 使用道具 举报
刘晓 发表于 2013-6-22 14:19
第一题结果:
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
素数和为:106 ...

好吧,那我不上传相片了。直接给你复制第二题的结果。
2 5 9 10 31 48 59 69 95 154
2
5
  0
   0
    31
     0
      59
       0
        0
         0

点评

看清题,是素数赋值为零...  发表于 2013-6-22 15:44

评分

参与人数 1技术分 +3 收起 理由
夜默 + 3

查看全部评分

回复 使用道具 举报
  1. int length = 0; //杨辉三角形的长度

  2.                         Console.Write("输入杨辉三角长度");
  3.                         length = Convert.ToInt32(Console.ReadLine()); //指定杨辉三角的长度

  4.                         int[][] a = new int[length][]; //二维数组
  5.                         for (int i = 0; i < a.Length; i++)
  6.                         {
  7.                                 a[i] = new int[i + 1];//遍历,赋值增量
  8.                         }
  9.                         for (int j = 0; j < a.Length; j++)
  10.                         {
  11.                                 a[j][0] = 1; //把第一列的元素都赋1
  12.                                 a[j][j] = 1;//把第一列最右边的元素都赋1
  13.                                 for (int m = 1; m < a[j].Length - 1; m++)
  14.                                 {
  15.                                         a[j][m] = a[j - 1][m - 1] + a[j - 1][m];//其余的值由杨辉公式计算
  16.                                 }
  17.                         }
  18.                         for (int i = a.Length - 1; i >= 0; i--)//遍历数组输出杨辉三角形
  19.                         {
  20.                                 for (int b = 0; b < a.Length - a[i].Length; b++)
  21.                                 {
  22.                                         Console.Write("\0");  //输出空格
  23.                                 }
  24.                                 for (int j = a[i].Length - 1; j >= 0; j--)
  25.                                 {
  26.                                         Console.Write("{0}\0", a[i][j]);
  27.                                 }
  28.                                 Console.Write("\n");  //换行

  29.                         }
  30.                         Console.Read();
  31. [img]桌面/三角[/img]
复制代码
回复 使用道具 举报
刘晓 发表于 2013-6-22 15:42
好吧,那我不上传相片了。直接给你复制第二题的结果。
2 5 9 10 31 48 59 69 95 154
2

:sleepy:我错了。。。
回复 使用道具 举报
  1. /*1. 题目打印输出一百以内的素数的累加和...*/

  2. /*
  3. * 思路:首先利用循环(1-100)检验每一个数是否是素数
  4. *                 如果是  累加到一个表示和的变量里面
  5. */
  6. public class Test1 {
  7.         public static void main(String[] args) {

  8.                 // boo这个变量值为true表示是素数
  9.                 boolean boo = true;

  10.                 // sum用来记录给定范围的所有素数的和的变量
  11.                 int sum = 0;
  12.                
  13.                 // 外层循环用来控制个数
  14.                 System.out.println("1~100所有的素数:");
  15.                 for (int i = 2; i <= 100; i++) {
  16.                         // 内层循环确定是否为素数
  17.                         // 根据素数的定义 :在一个大于1的自然数中,除了1和此整数自身外,不能被其他自然数整除的数为素数 所以找到不是素数的数,然后输出即可
  18.                         for (int j = 2; j < i; j++) {// 循环判断小于自己的数能否被整除
  19.                                
  20.                                 if (i % j == 0) { // 如果能被整除 则表示不是素数
  21.                                         boo = false;// 更改标记
  22.                                         // 如果程序周到此处 就证明当前这个数不是素数 可以停止循环
  23.                                         break;
  24.                                 }
  25.                         }
  26.                        
  27.                         if (boo) { //判断标记的是否是素数 如果是素数则求和并打印这个数
  28.                                 sum += i;
  29.                                 System.out.print(i + " ");
  30.                         }
  31.                         boo = true;//改回标记用于下次使用
  32.                 }

  33.                 System.out.println();
  34.                 System.out.println("1~100的素数的和是:" + sum);

  35.         }
  36. }
复制代码
  1. /*2. 将该数组由小到大进行排列,数组中的素数全部赋值为零,并 按阶梯状输出。*/
  2. /*
  3. *思路:首先采用一种排序算法将数组进行排序
  4. *              然后对排序后的数组的每一个元素进行素数条件检测  检测到是素数  清零
  5. *              最后 阶梯打印该数组
  6. */
  7. public class Test2 {
  8.         public static void main(String[] args) {

  9.                 int[] arr0 = { 2, 1, 4, 66, 8, 3, 11 };
  10.                 System.out.print("原数组:");
  11.                 printArry(arr0);// 打印数组元素方法
  12.                 System.out.println();

  13.                 sort(arr0);// 对数组进行排序
  14.                 System.out.print("改变前:");
  15.                 printArry(arr0);
  16.                 System.out.println();

  17.                 primeToZero(arr0);// 遍历数组并置换为 并改写成0
  18.                 System.out.print("改变后:");
  19.                 printArry(arr0);
  20.                 System.out.println();

  21.                 //阶梯状打印数组元素
  22.                 tiXingPrintArry(arr0);
  23.         }

  24.         // 阶梯状打印数组元素 ---实际上在对角线上进行数组元素的打印---打印三角形
  25.         private static void tiXingPrintArry(int[] arr) {
  26.                 // 外层循环控制打印的行数
  27.                 // ---由于一个元素占据一行 所以 一共打印的行数就是数组中元素的个数
  28.                 for (int i = 0; i < arr.length; i++) {

  29.                         for (int j = 0; j <= i + 1; j++) {

  30.                                 if (i == j)// 这个就相当于判断是不是 第1行第1个...或第n行第n个
  31.                                         System.out.print(arr[i]);
  32.                                 else
  33.                                         System.out.print(" ");
  34.                         }

  35.                         System.out.println();
  36.                 }
  37.         }

  38.         // 打印数组
  39.         private static void printArry(int[] arr) {
  40.                 for (int x : arr) {
  41.                         System.out.print(x + " ");
  42.                 }
  43.         }

  44.         // 对数组中的素数进行清零 先遍历再判断
  45.         private static void primeToZero(int[] arr) {
  46.                 for (int x = 0; x < arr.length; x++) {
  47.                         if (isPrime(arr[x]))// 此方法返回布尔类型进行判断 判断是否为素数
  48.                                 arr[x] = 0;// 元素清零
  49.                 }
  50.         }

  51.         // 判断一个数是否为素数
  52.         private static boolean isPrime(int num) {
  53.                 boolean boo = true;// boo这个变量值为true表示是素数
  54.                 // 根据素数的定义 :在一个大于1的自然数中,除了1和此整数自身外,不能被其他自然数整除的数为素数 所以找到不是素数的数即可
  55.                 for (int i = 2; i < num; i++) {
  56.                         if (num % i == 0) { // 如果能被整除 整除标记boo标记为false 表示不是素数
  57.                                 boo = false;
  58.                                 // 如果程序周到此处 就证明当前这个数不是素数 可以跳出循环
  59.                                 break;
  60.                         }
  61.                         // 是素数则返回true
  62.                         boo = true;
  63.                 }
  64.                 return boo;
  65.         }

  66.         // 对数组进行选择排序
  67.         private static void sort(int[] arr) {
  68.                 // 遍历数组外层控制个数
  69.                 for (int x = 0; x < arr.length; x++) {
  70.                         for (int y = 0; y < arr.length - 1; y++) {
  71.                                 // 判断大小
  72.                                 if (arr[y] > arr[y + 1]) {
  73.                                         // 交换
  74.                                         int temp = arr[y];
  75.                                         arr[y] = arr[y + 1];
  76.                                         arr[y + 1] = temp;
  77.                                 }
  78.                         }
  79.                 }
  80.         }
  81. }
复制代码
  1. /*3.倒序杨辉三角*/
  2. import java.util.ArrayList;
  3. public class Test3 {
  4.         public static void main(String[] args) {
  5.                 int layers =4;
  6.                 //Step1. 产生杨辉三角列表
  7.                 ArrayList<ArrayList<Integer>> yanghuiTrList = generateYangTrList(layers);
  8.                 System.out.println("产生的杨辉列表如下:");
  9.                 printYanghuiList(yanghuiTrList);
  10.                
  11.                 //Step2.倒序打印杨辉三角
  12.                 System.out.println("倒序打印杨辉三角如下:");
  13.                 printInverseYanghuiArr(layers, yanghuiTrList);
  14.         }
  15.        
  16.         /**
  17.          * function: 倒序打印杨辉三角
  18.          * @param layers ---表示杨辉三角的层数
  19.          * @param yanghuiTrList ----杨辉三角的列表
  20.          */
  21.         private static void printInverseYanghuiArr(int layers,
  22.                         ArrayList<ArrayList<Integer>> yanghuiTrList) {
  23.                 //Step1. 控制打印的行数
  24.                 for(int i=1, layer =layers-1; i<=layers; i++, layer--){
  25.                         //先打印空格部分  填充空白区域
  26.                         for(int j=1; j<= i-1; j++){
  27.                                 System.out.print(" ");
  28.                         }
  29.                        
  30.                         //取出本层的杨辉数字列表
  31.                         ArrayList<Integer> eachLayerList =yanghuiTrList.get(layer);
  32.                        
  33.                         int index =0;
  34.                         for(int j=1; j<=9 -2*i; j++){
  35.                                 if(j%2 ==0)//隔一位打印一个数字
  36.                                         System.out.print(" ");
  37.                                 else{
  38.                                         System.out.print(eachLayerList.get(index));
  39.                                         index++;
  40.                                 }
  41.                         }
  42.                         System.out.println();
  43.                 }
  44.         }
  45.        
  46.         //打印杨辉列表  -- 测试使用
  47.         private static void printYanghuiList(
  48.                         ArrayList<ArrayList<Integer>> yanghuiTrList) {
  49.                 System.out.println("**************************************");
  50.                 for(int i=0; i<yanghuiTrList.size(); i++){
  51.                         for(int j=0; j<yanghuiTrList.get(i).size(); j++){
  52.                                 System.out.print(yanghuiTrList.get(i).get(j)+ " ");
  53.                         }
  54.                         System.out.println();
  55.                 }
  56.                 System.out.println("**************************************");
  57.         }

  58.         //产生杨辉三角列表  方法的参数表示产生几层杨辉三角
  59.         private static ArrayList<ArrayList<Integer>> generateYangTrList(int layers) {
  60.                 ArrayList<ArrayList<Integer>> trList =new ArrayList<ArrayList<Integer>>();
  61.                 ArrayList<Integer> eachLayerList =null;
  62.                 //顺序产生各层杨辉列表
  63.                 for(int i=0; i<layers; i++){
  64.                         eachLayerList =new ArrayList<Integer>();
  65.                        
  66.                         //第0层杨辉列表: 1
  67.                         if(i==0){
  68.                                 eachLayerList.add(1);
  69.                                 trList.add(eachLayerList);
  70.                                 continue;
  71.                         }
  72.                        
  73.                         //第1层杨辉列表: 1  1
  74.                         if(i==1){
  75.                                 eachLayerList.add(1);
  76.                                 eachLayerList.add(1);
  77.                                 trList.add(eachLayerList);
  78.                                 continue;
  79.                         }
  80.                        
  81.                         //第0, 1层以外的杨辉列表
  82.                         //--每层杨辉列表的首数字都为1
  83.                         eachLayerList.add(1);
  84.                        
  85.                         //取出最后一次的杨辉列表  一共下面累加获得本层的杨辉列表的元素
  86.                         ArrayList<Integer> lastList =trList.get(trList.size()-1);
  87.                        
  88.                         //累加上一层的相邻两个元素进行求和
  89.                         for(int startIndex =0; startIndex <lastList.size() -1; startIndex++){
  90.                                 int adjacentSum =lastList.get(startIndex)+ lastList.get(startIndex+1);
  91.                                 eachLayerList.add(adjacentSum);
  92.                         }
  93.                         //--每层杨辉列表的尾数字都为1
  94.                         eachLayerList.add(1);
  95.                        
  96.                         trList.add(eachLayerList);
  97.                 }
  98.                 return trList;
  99.         }
  100. }
复制代码

点评

说好的的结果呢...  发表于 2013-6-23 00:56

评分

参与人数 1技术分 +4 收起 理由
夜默 + 4

查看全部评分

回复 使用道具 举报
  1. package ma.jun;
  2. //第2题答案[code]package ma.jun;
  3. //第1题答案
  4. public class SumDemo {

  5.         /**
  6.          * 1. 打印输出一百以内的素数的累加和...
  7.          *
  8.          * ===========================================================
  9.          *                                                 运行结果
  10.          * ===========================================================
  11.          *        100以内素数有:2
  12.                 100以内素数有:3
  13.                 100以内素数有:5
  14.                 100以内素数有:7
  15.                 100以内素数有:11
  16.                 100以内素数有:13
  17.                 100以内素数有:17
  18.                 100以内素数有:19
  19.                 100以内素数有:23
  20.                 100以内素数有:29
  21.                 100以内素数有:31
  22.                 100以内素数有:37
  23.                 100以内素数有:41
  24.                 100以内素数有:43
  25.                 100以内素数有:47
  26.                 100以内素数有:53
  27.                 100以内素数有:59
  28.                 100以内素数有:61
  29.                 100以内素数有:67
  30.                 100以内素数有:71
  31.                 100以内素数有:73
  32.                 100以内素数有:79
  33.                 100以内素数有:83
  34.                 100以内素数有:89
  35.                 100以内素数有:97
  36.                 100以内素数和为:1060
  37.          */
  38.         public static void main(String[] args) {
  39.                 primeSum();       
  40.         }
  41. //判断 100之内的素数
  42.         public static void primeSum() {
  43.                 int sum = 0;
  44.                 for (int i = 2; i <= 100; i++) {
  45.                         int j;
  46.                        
  47.                         for (j = 2; j <= i-1; j++) {
  48. //                                拿要循环的数i 从2开始 除以 i-1之间的所有数 能整除代表不是素数
  49.                                 if (i % j == 0){
  50.                                         break;
  51.                                         }
  52.                         }
  53.                         if (j >= i) {
  54.                                 System.out.println("100以内素数有:"+i);
  55.                                 sum+=i;                       
  56.                         }
  57.                 }
  58.                 System.out.println("100以内素数和为:" + sum);
  59.         }

  60. }
复制代码
第3题研究中....
public class PrintPrimeDemo {

        /**
         * 将该数组由小到大进行排列,数组中的素数全部赋值为零,并 按阶梯状输出。
         *
            数组:  2   5    9    10   48     95   154     31  59    69
            
                                                            运行结果
            
            ===============================================================
            
                    排序前:
                        arr[2,5,9,10,48,95,154,31,59,69]
                        排序后:
                        arr[2,5,9,10,31,48,59,69,95,154]
                        替换素数后:
                        arr[0,0,9,10,0,48,0,69,95,154]
                        按规则输出后:
                        0
                         0
                          9
                           10
                            0
                             48
                              0
                               69
                                95
                                 154
                  
         */
        public static void main(String[] args) {
                int[] arr={2,5,9,10,48,95,154,31,59,69};
                System.out.println("排序前:");
                printArr(arr);
               
                sortArr(arr);//进行数组排序
               
                System.out.println("排序后:");
                printArr(arr);//排序后
               
                replacePrime(arr);//替换素数
               
                System.out.println("替换素数后:");
                printArr(arr);
               
                System.out.println("按规则输出后:");
                ruleOutArr(arr);//按规则输出
        }
        //替换 素数   4
        public static void replacePrime(int arr[]){
                for(int x=0;x<arr.length;x++){
                        int j;
                        for(j=2;j<arr[x];j++){
                                if(arr[x]%j==0){
                                        break;
                                }
                        }
                        if(j>=arr[x]){
//                                把0赋值给 x; 即素数
                                arr[x]=0;
                        }
                }
        }
//        排序数组
        public static void sortArr(int arr[]){
                for(int x=0;x<arr.length;x++){                       
                        for(int y=x+1;y<arr.length;y++){
                                if(arr[x]>arr[y]){
//                                        数值替换
                                        int temp=arr[x];
                                        arr[x]=arr[y];
                                        arr[y]=temp;
                                }
                        }
                }
        }
//        打印数组
        public static void printArr(int arr[]){
                System.out.print("arr[");
                for(int x=0;x<arr.length;x++){
                        if(arr[x]==arr[arr.length-1])
                                System.out.print(arr[x]+"]");
                        else
                                System.out.print(arr[x]+",");
                }
                System.out.println();
        }
//         规则输出数组
        public static void ruleOutArr(int arr[]){
               
                for(int x=0;x<arr.length;x++){
                       
                        for(int y=0;y<x;y++){
                                System.out.print(" ");//打印空格
                        }
                        System.out.println(arr[x]);
                }
        }
}[/code]

评分

参与人数 1技术分 +5 收起 理由
夜默 + 5

查看全部评分

回复 使用道具 举报

  1. <P>/*第一题代码*/</P>
  2. <P>class PrimeNum
  3. {
  4. public static void main(String[] args)
  5. {
  6. int sum =2;//2是最小的素数,可省略判断
  7. int flag=0;//是否为素数的标志位

  8. for(int num=3;num<=100;num++)//从3开始判断是否为素数
  9. {

  10. for(int j=2;j<num;j++)//遍历num是否可以整除2到num-1之间的数
  11. {
  12. if(num%j!=0)
  13. {
  14. flag=1;//素数
  15. }
  16. else
  17. {
  18. flag=0;//非素数
  19. break;//非素数跳出内循环j
  20. }
  21. }

  22. if(flag==1)//如果是素数
  23. {
  24. sum+=num;//素数累加
  25. //System.out.println(num);//打印素数
  26. }

  27. }
  28. System.out.println("sum="+sum);//打印素数累加和

  29. }
  30. } </P>
复制代码

  1. <P>/*第二题代码*/</P>
  2. class SortNum
  3. {
  4. public static void main(String[] args)
  5. {
  6. int[] arr = {2,5,9,10,48,95,154,31,59,69};
  7. System.out.print("数组打印前:");
  8. for(int i=0;i<arr.length;i++)
  9. {
  10. System.out.print(arr[i]+" ");//打印原数组
  11. }
  12. System.out.println();//换行

  13. int temp;//中间变量
  14. int flag=0;//素数标志位
  15. System.out.print("数组打印后:");
  16. for(int i=0;i<arr.length;i++)
  17. {
  18. for(int j=i+1;j<arr.length;j++)//将数组元素按从小到大顺序排序
  19. {
  20. if(arr[i]>arr[j])
  21. {
  22. temp=arr[i];
  23. arr[i]=arr[j];
  24. arr[j]=temp;
  25. }
  26. }

  27. if(arr[i]==2)
  28. {
  29. flag=1;//素数
  30. }

  31. for(int j=2;j<arr[i];j++)//遍历num是否可以整除2到num-1之间的数
  32. {
  33. if(arr[i]%j!=0)
  34. {
  35. flag=1;//素数
  36. }
  37. else
  38. {
  39. flag=0;//非素数
  40. break;//非素数跳出内循环j
  41. }
  42. }

  43. if(flag==1)//如果是素数
  44. {
  45. arr[i]=0;//将素数赋为0
  46. //System.out.println(num);//打印素数
  47. }
  48. System.out.print(arr[i]+" ");//打印改变后的数组
  49. }

  50. for(int i=0;i<arr.length;i++)//将数组打印成阶梯状
  51. {
  52. for(int j=0;j<i;j++)
  53. {
  54. System.out.print(" ");
  55. }
  56. System.out.println(arr[i]);
  57. }
  58. }


  59. }
复制代码

primenum.jpg (10.33 KB, 下载次数: 0)

1到100内的素数

1到100内的素数

SortNum.jpg (18.45 KB, 下载次数: 0)

排序打印

排序打印

评分

参与人数 1技术分 +5 收起 理由
夜默 + 5

查看全部评分

回复 使用道具 举报
第一题代码:

结果:

回复 使用道具 举报
晕,贴成图片了,
第一题代码附上:
  1. <p>public class Ques1 {</p><p> /**
  2.   * 分析和思路:
  3.   * 1,什么事素数:在大于1的自然数中,只能被1和自身整除的数叫素数
  4.   * 2,如何求出100以内的素数有哪些:
  5.   *   ①因为涉及到两个数值的循环操作所以用嵌套for循环实现
  6.   *   ②外循环求出2-100的自然数,内循环求出不能被除了1和自身整除的素数
  7.   *   ③内循环的循环数值设为和外循环数值相等,内循环数值每循环一次自减1,
  8.   *   因为任何自然数都能被1整除所以内循环的除数可以设为>=2的自然数
  9.   *   ④假如要求的数值能被小于它自身的数值整除,那么直接跳出内循环,进行下一次外循环
  10.   *   ⑤假如内循环数值到了最小值2还没跳出内循环,那么就得出此数值属于素数,然后进行累加求和
  11.   *   
  12.   */
  13. public static void main(String[] args) {
  14.   
  15.   int sum = 0;//记录和
  16.   for(int i = 2; i<=100; i++)
  17.   {
  18.    for(int j = i;j>=2;j--)
  19.    {
  20.     if((i%j==0)&&(i!=j))//要求的数能被整除,并且除数不等于自身则跳出次循环
  21.     break;
  22.     if(j==2)//到达最小值还没满足以上条件,得出素数
  23.     {
  24.      sum = sum+i;//进行素数和的累加
  25.     }
  26.    }
  27.   }
  28.   System.out.println("100以内的素数和为:"+sum);</p><p> }</p><p>}</p>
复制代码
运行结果:

回复 使用道具 举报
第二题代码附上:
  1. <p>public class Ques2 {</p><p> /**
  2.   * 思路:
  3.   * 1,先进行冒泡排序
  4.   * 2,把排序后的数组进行素数判断,把素数和0进行替换
  5.   * 3,阶梯打印数组:每打印一个数组中的元素换行一次,每换行一次多打印一个空格
  6.   */
  7. public static void main(String[] args) {
  8.   // TODO Auto-generated method stub
  9.   int[] arry ={2,5,9,10,48,95,154,31,59,69};
  10.   sort(arry);//进行冒泡排序
  11.   System.out.print("数组改变前:");
  12.   print(arry);//打印排序后的数组
  13.   System.out.println();
  14.   System.out.print("数组改变后:");
  15.   replacePrime(arry);//把数组的中的素数替换成0
  16.   print(arry);//打印替换后的数组
  17.   System.out.println();
  18.   System.out.println("输出数组:");
  19.   augmentPrint(arry);//阶梯打印数组
  20. }
  21. /*
  22.   * 打印数组
  23.   */
  24. public static void print(int[] arry)
  25. {
  26.   for(int i = 0;i<arry.length;i++)
  27.   {
  28.    System.out.print(arry[i]);
  29.    System.out.print("\t");
  30.   }
  31. }
  32. /*
  33.   * 进行冒泡排序,并把数组中的素数替换成0
  34.   */
  35. public static void sort(int[] arry)
  36. {
  37.   for(int i =arry.length-1;i>0;i--)
  38.   {
  39.    for(int j =0;j<i;j++)
  40.    {
  41.     if(arry[j]>arry[j+1])
  42.     {
  43.      int temp = arry[j];
  44.      arry[j] = arry[j+1];
  45.      arry[j+1] = temp;
  46.     }
  47.    }
  48.    
  49.   }
  50. }
  51. /*
  52.   * 阶梯状输出数组
  53.   */
  54. public static void augmentPrint(int[] arry)
  55. {
  56.   for(int i = 0; i<arry.length;i++)
  57.   {
  58.    for(int j = i;j>0;j--)
  59.    {
  60.     System.out.print(" ");
  61.    }
  62.    System.out.println(arry[i]);
  63.   }
  64. }
  65. /*
  66.   * 判断值是否为素数,假如是则替换成0,否则不改变
  67.   */
  68. public static void replacePrime(int[] arry)
  69. {
  70.   for(int i = 0;i<arry.length;i++)
  71.   {
  72.    for(int j = arry[i]-1;j>=2;j--)
  73.    {
  74.     if(arry[i]%j==0)
  75.     {
  76.      arry[i]=0;
  77.      break;
  78.     }
  79.    }
  80.   }
  81. }</p><p>}
  82. </p><p> </p>
复制代码
运行结果:

点评

第二个没看清题的, 素数全部赋值为零...  发表于 2013-6-23 00:58
回复 使用道具 举报
第三题代码附上:
  1. import java.util.Scanner;


  2. public class Ques3 {

  3.         /**
  4.          * 思路分析:
  5.          * 1,如何实现杨辉三角
  6.          *         <1>分析图形:
  7.          *                 ①每行的元素个数等于行数。
  8.          *                 ②每行中元素的头和尾都是1。
  9.          *                 ③除了第一第二行和每行的头尾元素外,第二个元素的值是其上一行的相邻元素的和,以此类推。
  10.          *         <2>确定数据结构:
  11.          *                 ①通过分析,这里可以使用二位数组来实现,第一维度用来记录行数与其相关的元素个数。
  12.          *                 ②建立一个不规则的二位数组,第一维度的长度(打印的行数)通过键盘录入。
  13.          *                 ③因为第二维度的元素个数取决于第一维度,所以可以通过循环给第一维度相对应的元素个数赋值。
  14.          *                 ④当二维数组的第一和第二维的大小都确定了就可以给每个元素进行赋值了。
  15.          *         <3>如何存入数据:
  16.          *                 ①用嵌套循环可以实现二位数组的数据存储
  17.          *                 ②用此二位数组的第一维度确定外循环的次数
  18.          *                 ③根据第一维度的长度确定第二维度的长度
  19.          *                 ④根据分析图形得到的数据之间的关系,当第二维度的下标为头尾时候都是1,可以通过判断第二维度的
  20.          *                 下标来实现赋值。
  21.          *                         int[][] arry = new int[i][j];
  22.          *                         if(j==0||j==arry.length-1)
  23.          *                         arry[i][j]=1;
  24.          *                 ⑤第二维度的元素除了头尾外都是上一维的元素相邻的两个值的和,可以定义一个数组下标用于记录当前
  25.          *                 位置,每存储一个数据下标自增1,假如当前的第一维度相对应的第二维度数据存储满了,把记录的下标重置。
  26.          *                         arry[i][j]=arry[i-1][index]+arry[i-1][index+1];
  27.          *                        index++;
  28.          *                       
  29.          * 2,如何实现杨辉三角的倒立打印:
  30.          *        <1>分析图形:
  31.          *                ①这是由数组的第一维度倒着打印实现
  32.          *                ②每打印一行多一个空格,而每打印同一行的元素用2个空格隔开
  33.          *         <2>图形实现:
  34.          *                 ①用3个for循环实现,外循环控制行数,可以用数组的第一维度长度实现。
  35.          *                 因为数组的下标从0开始,所以外循环的条件for(int i = arry.length-1; i>=0; i--)
  36.          *                 ②内嵌2个for循环:
  37.          *                         第一个嵌套循环用于控制横向打印开始的空格数,
  38.          *                                         空格数 = arry.length-元素的个数-1               
  39.          *                         第二个嵌套循环用于控制横向打印的元素。
  40.          *                                 因为数组下标的关系,这里的条件还是要用第二维数组的长度-1
  41.          */
  42.         public static void main(String[] args) {
  43.                 // TODO Auto-generated method stub
  44.                 Scanner in=new Scanner(System.in);
  45.                 System.out.print("请输入行数:");
  46.                 int num=in.nextInt();//读取键盘录入
  47.                
  48.                 //初始化行数
  49.                 int[][] arry = new int[num][];
  50.                
  51.                 //初始化第二维数组的长度
  52.                 for(int i =0;i<arry.length;i++)
  53.                 {
  54.                         arry[i] = new int[i+1];//因为第一维的下标关系,这里要+1
  55.                 }
  56.                
  57.                 int index;//定义下标指针
  58.                
  59.                 //给二位数组赋值
  60.                 for(int i = 0; i<arry.length;i++)
  61.                 {
  62.                         index =0;//给不同维度的数组赋值都要初始化指针
  63.                        
  64.                         //给arry[i]维度下的元素赋值
  65.                         for(int j = 0 ;j<arry[i].length;j++)
  66.                         {
  67.                                 //假如是第二维数组的头尾,那么就把值赋为1
  68.                                 if((j==0)||(j==arry[i].length-1))
  69.                                         arry[i][j]=1;
  70.                                 else
  71.                                 {
  72.                                         //根据杨辉三角的规律,除了头和尾,每个不同维度的值都是上以维度的相邻两个值的和
  73.                                         arry[i][j]=arry[i-1][index]+arry[i-1][index+1];
  74.                                         index++;
  75.                                 }
  76.                         }
  77.                                
  78.                 }
  79.                
  80.                 //倒立打印杨辉三角
  81.                 for(int i = arry.length-1; i>=0; i--)
  82.                 {
  83.                        
  84.                         //打印横向开始时的空格数
  85.                         for(int j = arry.length-i-1;j>0;j--)
  86.                                 System.out.print("\t");
  87.                        
  88.                         //打印每一行的元素(在每一行的元素没打印完前,不换行)
  89.                         for(int k =0;k<=arry[i].length-1;k++)
  90.                         {
  91.                                 System.out.print(arry[i][k]);
  92.                                 System.out.print("\t\t");
  93.                         }
  94.                         //打印完一行,换行
  95.                         System.out.println();
  96.                 }
  97.         }

  98. }
复制代码
运行结果:


回复 使用道具 举报
xuluheng718 发表于 2013-6-22 21:14
第三题代码附上:运行结果:

第三题的运行图片没上传成功,补上:


评分

参与人数 1技术分 +5 收起 理由
夜默 + 5

查看全部评分

回复 使用道具 举报
file:///E:/12.jpg
运行结果
file:///C:/Users/Administrator.PC--20130621GXC/AppData/Roaming/Tencent/Users/1009761314/QQ/WinTemp/RichOle/%7BC]G668OEEK6K%60OHST~41YS.jpg
回复 使用道具 举报
  1. static void Main(string[] args)
  2.                 {
  3.                         int[] S = { 2, 5, 9, 10, 48, 95, 154, 31, 59, 69 };
  4.                         int min = 0; //中间变量
  5.                        
  6.                         for (int i = 0; i <= S.Length - 1; i++) //比较S.Length-1次排序
  7.                         {
  8.                                 for (int j = 0; j < S.Length - 1; j++)
  9.                                 {
  10.                                         if (S[j] > S[j + 1])
  11.                                         {
  12.                                                 min = S[j]; //交换变量,由小到大排列
  13.                                                 S[j] = S[j + 1];
  14.                                                 S[j + 1] = min;
  15.                                         }
  16.                                 }
  17.                         }
  18.             int m;
  19.             for (int a = 0; a < S.Length; a++)
  20.             {
  21.                 for (m = 2; m <= S[a]; m++)
  22.                 {
  23.                     if (S[a] % m == 0 && S[a] != 2)
  24.                         break;
  25.                 }
  26.                 if (S[a] == m)  //为素数,则赋值0
  27.                     S[a] = 0;
  28.                 Console.Write("{0}", S[a]);
  29.                 Console.Write("\n");
  30.                 for (int b = 0; b <= a; b++)  //输出空格
  31.                 {
  32.                     Console.Write("\0");
  33.                 }
  34.             }
  35.                         Console.ReadKey();
  36.                 }//结果为:2 0 9 10 0 48 0 69 95 154
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马