: :其他软件 2020-07-07 17:23:15
目录:非常经典的java编程题程序1:斐波那契数列问题程序2:素数问题程序3:水仙花数程序4:正整数分解质因数程序5:成绩等级判定程序6:求两个数的最大公约数和最小公倍数程序7:检索字符串字母数字空格程序8:求sum=a+aa+aaa+aaaa+aa....a的值程序9:完数程序10:弹性球反弹问题
非常经典的java编程题
程序1:斐波那契数列问题
题目概述:
古典问题:有一对兔子,从出生第三个月起每月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少
代码:
ubcclassProgramming1{
斐波那契数列问题
ubcstaticvoidmain(String[]args){
Syst.out.rintln(Fibonacci(1));
Syst.out.rintln(Fibonacci(2));
Syst.out.rintln(Fibonacci(3));
Syst.out.rintln(Fibonacci(4));
}ubcstaticintfunction(intmonth){
**
*@descrition:迭代算法求解斐波那契数列
*@arammonth
*@cateDate:20207421:44
*@turn:int
*
inta=2,b=2,c,count=1;
while(count<month){
c=a;
a=a+b;
b=c;
count++;
}
turna;
}考虑使用递归完成计算
ubcstaticintFibonacci(intmonth){
**
*@descrition:运用递归思想解决斐波那契数列
*@arammonth
*@cateDate:20207421:46
*@turn:int
*
if(month==1||month==2){
turn2;
}else{
turnFibonacci(month-1)+Fibonacci(month-2);
}
}
}
迭代求解思路程序2:素数问题
题目概述:
判断101-200之间有多少素数,并输出所有素数。
素数又称为质数,一个大于1的自然数,除了1和它自身之外,不能被其他任何自然数整除的数叫素数。
**判断素数的方法:**用一个数分别去除2到sqrt(这个数),如果能被整除,则表示这个数不是素数,反之是素数。
注:之所以除到这个数的算数平方根,是因为任何一个数,都只能分解一个小于另一个大于其算数平方根的因子(或链两个因子相同,即是该数的算数平方根)
代码:
ubcclassProgramming2{ubcstaticvoidmain(String[]args){
intnum;
for(inti=101;i<=200;i++){
num=i;
if(isPrime(num)){
Syst.out.rintln(i+"t");
}
}
}ubcstaticbooleanisPrime(intnum){
**
*@descrition:判断整数num是否为素数
*@aramnum
*@cateDate:20207422:06
*@turn:boolean
*
booleans=true;
for(inti=2;i<Math.sqrt(num);i++){
if(num==2){
s=true;
}else{
if(num%i==0){
s=false;
eak;
}
}
}
turns;
}
}
程序3:水仙花数
题目概述:
打印所有的水仙花数
水仙花数:是指一个三位数,其各位数字立方和等于该数字本身。例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。
代码:
ubcclassProgramming3{
ubcstaticvoidmain(String[]args){
for(inti=101;i<1000;i++){
intnum=i;
if(isRes(num)){
Syst.out.rint(i+"t");
}
}
}ubcstaticbooleanisRes(intnumber){
**
*@descrition:判断一个数是否为水仙花数
*@aramnumber
*@cateDate:20207422:12
*@turn:boolean
*
booleans=false;
inta=number100;取数字的百位
intb=number%10010;取数字的十位
intc=number%10;取数字的各位
if(number==(a*a*a+b*b*b+c*c*c)){
s=true;
}
turns;
}
}
程序4:正整数分解质因数
题目概述:
将一个正整数分解质因数。例如:输入90,打印出90=233*5。
程序分析:对n进行分解质因数,应先找到一个最小的质数k,,然后按下述步骤完成:
(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
(2)如果n>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数n,重复执行第一步。
(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
代码:
ubcclassProgramming4{
ubcstaticvoidmain(String[]args){
Syst.out.rintln("请输入一个整数:");
Scannerscanner=newScanner(Syst.in);
floatn=scanner.nextFloat();
Syst.out.rint((int)(n)+"=");
for(intk=2;k<=n;){
if(n==k){
Syst.out.rintln(k);
eak;
}elseif(n%k==0){
n=nk;
Syst.out.rint(k+"*");
}else{
k++;
}
}
}
}程序5:成绩等级判定
题目概述:
敲写一个用来判断成绩的代码,其中90以上为‘A’,80-90之间为‘B’,60-80之间为‘C’,60分以下为‘D’
代码:
ubcclassProgramming5{
ubcstaticvoidmain(String[]args){
Scannerscanner=newScanner(Syst.in);
Syst.out.rintln(function(101));
Syst.out.rintln(function(91));
}ubcstaticStringfunction(doublesco){
Strings="您输入的成绩有误。";
if(sco>=90&am;sco<=100){
s="A";
}elseif(sco>=80&am;sco<90){
s="B";
}elseif(sco>=60&am;sco<80){
s="C";
}elseif(sco<60&am;sco>=0){
s="D";
}
turns;
}
}程序6:求两个数的最大公约数和最小公倍数
题目概述:
输入两个正整数m,n,求最大公约数和最小公倍数
辗转相除法:
用较小数除较大数,再用出现的余数(第一余数)去除除数,再用出现的余数(第二余数)去除第一余数,如此反复,直到最后余数是0为止。如果是求两个数的最大公约数,那么最后的除数就是这两个数的最大公约数。
代码:
ubcclassProgramming6{
ubcstaticvoidmain(String[]args){
Scannerscanner=newScanner(Syst.in);
intnum1=scanner.nextInt();
intnum2=scanner.nextInt();
ints1=f(num1,num2);
ints2=num2*num1s1;
Syst.out.rintln("最大公约数:"+s1+"t最小公倍数:"+s2);
Syst.out.rintln("最大公约数:"+gcd(num1,num2)+"t最小公倍数:"+s2);
}ubcstaticintf(intx,inty){
**
*@descrition:辗转相除法求取最大公约数迭代求解
*@aramx
*@aramy
*@cateDate:20207423:10
*@turn:int
*
intt;
if(x<y){
t=x;
x=y;
y=t;
}
while(y!=0){
if(x==y){
turnx;
}else{
intk=x%y;
x=y;
y=k;
}
}
turnx;
}ubcstaticintgcd(intx,inty){
**
*@descrition:辗转相除法求取最大公约数的递归求解
*@aramx
*@aramy
*@cateDate:20207423:11
*@turn:int
*
intt;
if(x<y){
t=x;
x=y;
y=t;
}
if(x==y||y==0){
turnx;
}else{
turngcd(y,x%y);
}
}
}
程序7:检索字符串字母数字空格
题目概述:
输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数
代码:
ubcclassProgramming7{
ubcstaticvoidmain(String[]args){
intdigital=0;
intletter=0;
intother=0;
intblank=0;
char[]ch=nl;
Syst.out.rintln("请输入目标字符串:");
Scannerscanner=newScanner(Syst.in);
Stringstr=scanner.nextLine();
ch=str.toCharArray();
for(inti=0;i<ch.length;i++){
if(ch[i]>='0'&am;&am;ch[i]<='9'){
digital++;
}elseif((ch[i]>='a'&am;&am;ch[i]<='z')||(ch[i]>='A'&am;&am;ch[i]<='Z')){
letter++;
}elseif(ch[i]==''){
blank++;
}else{
other++;
}
}
Syst.out.rintln("数字个数为:"+digital);
Syst.out.rintln("字母个数为:"+letter);
Syst.out.rintln("空格个数为:"+blank);
Syst.out.rintln("其它字符个数为:"+other);
}
}
程序8:求sum=a+aa+aaa+aaaa+aa…a的值
题目概述:
代码:
ubcclassProgramming8{
ubcstaticvoidmain(String[]args){
Scannerscanner=newScanner(Syst.in);
Syst.out.rintln("请输入数字的值:");
intbase=scanner.nextInt();
Syst.out.rintln("请输入执行的次数:");
intn=scanner.nextInt();
循环累加
inta=base,sum=base;
for(inti=1;i<n;i++){
a=a*10+2;
sum=sum+a;
}
Syst.out.rintln("结果为:"+sum);}}
程序9:完数
题目概述:
求1000以内的完数
完数:一个数恰好等于它的因子之和
代码:
ubcclassProgramming9{
ubcstaticvoidmain(String[]args){
for(intj=1;j<=1000;j++){
intsum=0;
for(inti=1;i<j;i++){
if(j%i==0){
sum=sum+i;
}
}
if(sum==j){
Syst.out.rintln(j+"");
}
}}}
程序10:弹性球反弹问题
题目概述:
一个球从100米高度自由落下,每次落地后反跳回原高度的一半再落下,求它在10次落地时,共经过多少米,第十次反弹有多高。
代码:
ubcclassProgramming10{
ubcstaticvoidmain(String[]args){
doubleh=100;
doubles=h;
for(inti=1;i<10;i++){
s=s+h;
h=h2;
}
double0=h2;
Syst.out.rintln("10次落地时,共经过"+s+"米t"+"第十次反弹高度为:"+0+"米");
}
}