黑马程序员_活动:100以内素数之和、数组排序阶梯状输出、反向打印杨辉三角

------- android培训java培训、期待与您交流! ----------

package com.itheima;

import java.util.Scanner;
class GetPrimeNumber {
/**
* @param args

* 1.  打印输出一百以内的素数的累加和...  
     * 2.将该数组由小到大进行排列,数组中的素数全部赋值为零,并 按阶梯状输出。
     *  数组:  2   5    9    10   48     95   154     31  59    69
     * 3.手动输入一个自然数N,反向打印N行杨辉三角。
*/

private static int sum = 0;//定义全局变量素数和 sum
private static int arr[]={2,5,9,10,48,95,154,31,59,69};//定义并初始化数组
private static int rownum = 0;//定义杨辉三角的行数rownum

public static void main(String[] args) {

// TODO Auto-generated method stub

getPrimeNumSum();//获取100以内的素数累加和

printNewNum();//重新排列输出

printTriangle();//反向打印杨辉三角

}
private static void getPrimeNumSum()

for(int i=2;i<100;i++)
{
if(i == 2 || i==3)//将2、3 两个特殊的数单列出来
{
System.out.println(i+"是素数");
sum += i;
}
for(int j=2;j<Math.sqrt(i);j++)
{
//如果除了1和它本身两个约数外,还有别的约数,那么这个数就不是素数

if(i%j==0 )
{
break;
}  

//如果除了1和它本身两个约数外,没有别的约数,那么这个数就是素数
//加上j> Math.sqrt(i)-1)是为了限制计算和打印只进行一次
else if((i%j != 0) && (j > Math.sqrt(i)-1) )
{
System.out.println(i+"是素数");
sum += i;
}
}
}

System.out.println("100以内的素数之和是:"+sum);
}
// 数组:  2   5    9    10   48     95   154     31  59    69
private static void printNewNum()
{
for(int k = 0;k < arr.length;k++)//判别数据是否是素数,并将数组中的素数改变为0
{
if(arr[k]==2 || arr[k]==3)
{
arr[k] = 0;
}
else
{
for(int kk = 2;kk <Math.sqrt(arr[k]);kk++)
{
if(arr[k] % kk == 0)//如果有其他约数,则跳出循环
break;

else if(arr[k]%kk !=0 && kk>Math.sqrt(arr[k])-1)//如果是素数,则将其数值修改为0
arr[k] = 0;
}
}
}
for (int ii = 0;ii<arr.length;ii++)//打印数据
for(int jj = 0 ;jj <=ii ;jj++)
if(jj == ii)
System.out.println(arr[ii]);//对角线形式打印并换行
else
System.out.print(" ");//打印空格
}
private static int getRow()
{
Scanner sc = new Scanner(System.in);// 获取输入数字
try
{
rownum = sc.nextInt();
while(rownum<1)//数据合法性判断
    {
    System.out.println("输入的数据大小不合法,请重新输入:");
    rownum = sc.nextInt();
    }
}
catch(Exception e)
{
System.out.println("输入数据不合法,出现异常:"+e.toString()); 
System.out.println("请重新输入一个正整数:");
getRow();
}  
return rownum;

}

//反向打印杨辉三角 组合数开始结束部分采用定义的格式打印1 中间部分采用定义的方法计算出相应的数值并打印出来

//利用组合的知识计算杨辉三角的取值,并按照题目要求实现反向打印出结果

private static void  printTriangle()
{
System.out.println("请输入杨辉三角的行数:");
rownum= getRow();
//System.out.println(rownum);
for(int row = 1;row < rownum+1 ;row++)
{
for(int col=1;col<=2*rownum-row ;col++)
{
if(row == 1 && col%2 == 0)
{
System.out.print(" ");
continue;
}
else if(col == row || col == 2*rownum-row)//每行的开始、结束部分都是1
{
System.out.print(1);
continue;
}
else if (col>row && col <2*rownum-row && (col-row) %2  == 0 )
{
if((rownum-row-(col-row)/2)>=0 && (col-row)/2>=0)
{
int numerator =getFactorial(rownum-row);//求分子
int denominator = getFactorial(rownum-row-(col-row)/2)*getFactorial((col-row)/2);//求分母
System.out.print(numerator/denominator);
continue;
}
}

else
System.out.print(" ");打印空格
}
System.out.println();
}
}
private static int getFactorial(int n)//求n的阶乘
{
if(n==1 || n==0)
return 1;
else if(n>1)
return(n* getFactorial(n-1));
else
System.out.println("参数有误!");
return -1;
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值