常用算法答案.docx
《常用算法答案.docx》由会员分享,可在线阅读,更多相关《常用算法答案.docx(25页珍藏版)》请在冰豆网上搜索。
![常用算法答案.docx](https://file1.bdocx.com/fileroot1/2022-11/16/e40e5b3f-4902-4f3a-bae7-85a88d183c3e/e40e5b3f-4902-4f3a-bae7-85a88d183c3e1.gif)
常用算法答案
阶乘之和
/*
*输入n,计算S=1!
+2+3!
+…十n!
的末6位(不含前导0)。
n≤106。
*这里,n!
表示前n个正整数之积。
*/
packagecom.MyDem.MyDem5;
publicclassMyDem01{
publicstaticvoidmain(String[]args)
{
//
inte=sum(11);
Stringa=e+"";
System.out.println(a);
if(a.charAt((a.length()-6))=='0')
{
System.out.println(a.substring(a.length()-5,a.length()));
}else
{
System.out.println(a.substring(a.length()-6,a.length()));
}
}
publicstaticintsum(intn)
{
inta=0;
for(inti=1;i<=n;i++)
{
inte=1;
for(intj=1;j<=i;j++)
{
e*=j;
}
a+=e;
}
returna;
}
}
数据统计
/**
*
* 输入一些整数,求出它们的最小值、最大值和平均值(保留3位小数)。
*输入保证这些数都是不超过1000的整数。
*
*
*@paramargs
*@throwsIOException
*@throwsNumberFormatException
*/
packagecom.MyDem.MyDem5;
importjava.io.BufferedReader;
importjava.io.IOException;
importjava.io.InputStreamReader;
publicclassMyDem02{
publicstaticvoidmain(String[]args)throwsNumberFormatException,IOException{
//
intSIZE=3;
BufferedReaderbr=newBufferedReader(newInputStreamReader(System.in));
float[]arr=newfloat[SIZE];
for(inti=0;iSystem.out.println("请输入"+(i+1)+"个实数");
arr[i]=Float.parseFloat(br.readLine());
}
floats=0;
for(inti=0;is+=arr[i];
}
System.out.println(SIZE+"个数的平均数为:
"+s/SIZE);
compareNub(arr);
}
publicstaticvoidcompareNub(floatarr[])
{floata=arr[0];
floatb=arr[0];
for(inti=1;iif(arr[i]>a)
{
a=arr[i];
}
if(arr[i]
{
b=arr[i];
}
}
System.out.println("最大数为:
"+a);
System.out.println("最小数为:
"+b);
}
}
水仙花数(daffodil)
packagecom.MyDem.MyDem5;
publicclassMyDem03{
/**
* 输出100~999中的所有水仙花数。
若3位数ABC满足ABC=A2+B2+C2
*则称其为水仙花数。
*例如153=13+53十33,所以153是水仙花数。
*/
publicstaticvoidmain(String[]args){
//
for(inti=100;i<1000;i++)
{
daffodil(i);
}
System.out.println("循环完毕");
}
publicstaticvoiddaffodil(intn)
{
inta=n/100;
intb=n%100/10;
intc=n%10;
if(n==a*a*a+b*b*b+c*c*c)
{
System.out.println(n+"是一个水仙花数");
}
}
}
近似计算(approximation)
packagecom.MyDem.MyDem5;
publicclassMyDem04{
/**
* 计算,t/4=1-1/3+1/5-1/7+1/9-1/11+....
*直到最后一项小于10-6
*/
publicstaticvoidmain(String[]args){
//
doublea=1;
doubleq=1;
doubleb=1/3;
for(inti=0;i<100000000;i+=4){
a+=q/(1+i);
b+=q/(i-1);
if(q/(1+i)q/(i-1)&&i!
=0&&i!
=1)
{
System.out.println(a);
System.out.println(b);
System.out.println(4*(a-b));
break;
}
}
}
}
子序列的和(subsequence)
packagecom.MyDem.MyDem5;
importjava.text.DecimalFormat;
publicclassMyDem07{
/**
*
*输入两个正整数n*例如n=2,m=4时,答案是0.42361;n=65536,m=655360时答案为0.00001。
*
*/
publicstaticvoidmain(String[]args){
//
doublen=65536;
doublem=655360;
doublea=0;
for(inti=0;i<=m-n;i++){
a+=(double)(1/((double)(i+n)*(i+n)));
}
DecimalFormatdf=newDecimalFormat("0.#####");
System.out.println(df.format(a));
}
}
分数化小数(decimal)
packagecom.MyDem.MyDem5;
importjava.math.BigDecimal;
publicclassMyDem08{
/**
*
* 输入正整数a,b,c,输出a/b的小数形式,精确到小数点后c位。
*a,b≤106,c≤10。
*例如a=1,b=6,c=4时应输出0.1667。
*
*/
publicstaticvoidmain(String[]args){
//
inta=3;
ints=116;
intc=8;
doublef=(double)a/s;
BigDecimalb=newBigDecimal(f);
doublef1=b.setScale(c,BigDecimal.ROUND_HALF_UP).doubleValue();
System.out.println(f1);
}}
排列(permutation)
用1,2,3,…,9组成3个三位数abc,def和ghi,每个数字恰好使用一次,要求abc:
def:
ghi=1:
2:
3。
输出所有解。
提示:
不必太动脑筋。
组合数
packagecom.MyDem.MyDem5;
importjava.text.DecimalFormat;
publicclassMyDem09{
/**
*
* 输入非负整数n和m,输出组合数(n!
)/(m!
(n-m)!
)
*其中m≤n≤20。
*
*/
publicstaticvoidmain(String[]args){
//
permutation(15,20);
}
publicstaticvoidpermutation(intn,intm)
{
if(n>=m)
{
doublex=jiecheng(n)/(jiecheng(m)*jiecheng(n-m));
DecimalFormatdf=newDecimalFormat("0");
System.out.println(df.format(x));
}
else
{
doublex=jiecheng(m)/(jiecheng(n)*jiecheng(m-n));
DecimalFormatdf=newDecimalFormat("0");
System.out.println(df.format(x));
}
}
privatestaticdoublejiecheng(intn){
//
doublea=1;
for(inti=1;ia*=i;
}
//System.out.println(a);
returna;
}
}
孪生素数
packagecom.MyDem.MyDem5;
publicclassMyDem10{
/**
*
*如果n和n+2都是素数,则称它们是孪生素数。
输入m,输出两个数均
*不超过m的最大孪生素数。
5≤m≤10000。
*例如m=20时答案是17、19,m=1000时答案是881、883。
*
*/
publicstaticvoidmain(String[]ar