黑马程序员技术交流社区

标题: 练习分享-->java基础练习题 [打印本页]

作者: 陈圳    时间: 2013-3-3 19:50
标题: 练习分享-->java基础练习题
【程序1】   
题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?   
//这是一个菲波拉契数列问题
分析
【程序2】   
题目:判断101-200之间有多少个素数,并输出所有素数。
程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除, 则表明此数不是素数,反之是素数。   

【程序3】   
题目:打印出所有的 "水仙花数 ",所谓 "水仙花数 "是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个 "水仙花数 ",因为153=1的三次方+5的三次方+3的三次方。

【程序4】   
题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。   

【程序5】   
题目:利用条件运算符的嵌套来完成此题:学习成绩> =90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。   

【程序6】   
题目:输入两个正整数m和n,求其最大公约数和最小公倍数。   

【程序7】   
题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。   

【程序8】   
题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。   

【程序9】   
题目:一个数如果恰好等于它的因子之和,这个数就称为 "完数 "。例如6=1+2+3.编程     找出1000以内的所有完数。   

【程序10】   
题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在     第10次落地时,共经过多少米?第10次反弹多高?

最近下午听课总有点困意,应从网上找了些题目练练手,然后犯困的时候就做题,这样还是满有效的.下面把这些发出来与大家一起分享一下.顺便散下金币,话说这几天我的技术分已经差不多够了.要多努力学点东西了...
2-3更新一下.下面附上我自己写的程序...能做出来的就尽量别看我的啊,做出来了有方法优化的话,大家一起分享一下.
//我还没有建立一种先分析再解题的习惯...得改...
  1. /*1题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?   
  2. //这是一个菲波拉契数列问题*/
  3. class Proble1
  4. {
  5.         public static void main(String[] args)
  6.         {
  7.                 int[] arr=getSums(20);
  8.                 System.out.println(arr[19]);
  9.         }
  10.         public static int[] getSums(int moths)
  11.         {
  12.                 int f1=1;
  13.                 int f2=1;
  14.                 int[]arr=new int[moths];
  15.                 arr[0]=f1;
  16.                 arr[1]=f2;
  17.                 for(int i=2;i<moths;i+=2)
  18.                 {
  19.                         f1+=f2;
  20.                         f2+=f1;
  21.                         arr[i]=f1;
  22.                         arr[i+1]=f2;
  23.                 }
  24.                 return arr;
  25.         }
  26. }
复制代码
  1. /* 题目:判断101-200之间有多少个素数,并输出所有素数。
  2. 程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除, 则表明此数不是素数,反之是素数。*/
  3. class Proble2
  4. {
  5.         public static void main(String[]args)
  6.         {
  7.                 for(int i=101;i<=200;i++)
  8.                 {
  9.                         int n=0;
  10.                         for(int j=2;j<Math.sqrt(i);j++)
  11.                         {
  12.                                 if(i%j==0)
  13.                                 {
  14.                                         n++;
  15.                                         break;
  16.                                 }
  17.                         }
  18.                         if(n==0)
  19.                                 System.out.println(i+" ");
  20.                 }
  21.         }
  22. }
复制代码
  1. /*打印出所有的 "水仙花数 ",所谓 "水仙花数 "是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个 "水仙花数 ",因为153=1的三次方+5的三次方+3的三次方。*/
  2. class Proble3
  3. {
  4.         public static int[] getNums(Integer num)
  5.         {
  6.                 int[] arr=new int[num.toString().length()];
  7.                 for(int i=num.toString().length()-1;i>=0;i--)
  8.                 {
  9.                         arr[i]=num%10;//1634
  10.                         num/=10;
  11.                 }
  12.                 return arr;
  13.         }
  14.         public static void main(String[] args)
  15.         {
  16.                 Function(10000000);//获取int范围内的水仙数;
  17.         }
  18.         public static void Function(Integer num)
  19.         {
  20.                 int[] arr=new int[num.toString().length()];
  21.                 int sum=0;
  22.                 for(Integer i=1;i<num;i++)
  23.                 {
  24.                         for(int j=0;j<i.toString().length();j++)
  25.                         {
  26.                                 arr=getNums(i);
  27.                                 int temp=1;
  28.                                 for(int k=0;k<i.toString().length();k++)//使num每个位上的数乘以他的几次幂;
  29.                                         temp*=arr[j];
  30.                                 sum+=temp;
  31.                         }
  32.                         if(sum==i)
  33.                                 System.out.println(sum);
  34.                         sum=0;
  35.                 }
  36.         }
  37. }
复制代码
  1. /*题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。   */
  2. package Foundation;
  3. class Proble4
  4. {
  5.         public static void main(String[] args)
  6.         {
  7.                 int num=10500;
  8.                 String s=getNum(num);
  9.                 System.out.println(num+"="+s);
  10.         }
  11.         public static String getNum(int num)
  12.         {
  13.                 String s="";
  14.                 int i=2;
  15.                 while(num>=i)//90
  16.                 {
  17.                         while(num%i==0)
  18.                         {
  19.                                 if(num>i)  //分解到最后的因数小于分解的数时就+"*"
  20.                                 s+=i+"*";
  21.                                 else s+=i;  //否则就不加
  22.                                 num/=i;
  23.                         }
  24.                         i++;
  25.                 }
  26.                 //(num<i&&num!=1)
  27.                         //s+=num;
  28.                 if(s=="")
  29.                         s="该数没有正因数!";
  30.                 return s;
  31.         }
  32. }
复制代码
  1. /*利用条件运算符的嵌套来完成此题:学习成绩> =90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。*/
  2. class Proble5
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 System.out.println(getScore(99));
  7.         }
  8.         public static char getScore(int num)
  9.         {
  10.                 char score =0;
  11.                 if(num<=100&&num>=90)
  12.                         score='A';
  13.                 else if(num<90&&num>59)
  14.                                 score='B';
  15.                 else if(num>=0&&num<60)
  16.                                 score='C';
  17.                 else throw new RuntimeException("错误的分数!");
  18.                 return score;
  19.         }
  20. }
复制代码
  1. /*输入两个正整数m和n,求其最大公约数和最小公倍数。   */
  2. class Proble6
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 getNum(24,36);
  7.         }
  8.         public static void getNum(int a,int b)
  9.         {
  10.                 sop(getMin(a,b));
  11.                 sop(getMax(a,b));
  12.         }
  13.         public static int getMin(int a,int b)
  14.         {
  15.                 int min=a*b/(getMax(a,b));
  16.                 return min;
  17.         }
  18.         public static int getMax(int a,int b)
  19.         {
  20.                 int max_num=0;
  21.                 int i=1;
  22.                 while(i<a)
  23.                 {
  24.                         if(a%i==0&b%i==0)
  25.                                 max_num=i;
  26.                         i++;
  27.                 }
  28.                 return max_num;
  29.         }
  30.         public static void sop(Object obj)
  31.         {
  32.                 System.out.println(obj);
  33.         }
  34. }
复制代码
  1. /*输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。ASC2 空格 32 48-0 65-A 97-a*/
  2. class Proble7
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 String str="2342 134897d sfas dfjkl;ewrasfifa'cvje;weirou";
  7.                 System.out.println(getNum(str));
  8.         }
  9.         public static String getNum(String s)
  10.         {
  11.                 char[] arr=s.toCharArray();
  12.                 int[] num={0,0,0,0};
  13.                 String str;
  14.                 for(int i=0;i<arr.length;i++)
  15.                 {
  16.                         if(arr[i]==32)
  17.                                 num[1]++;
  18.                         else if(arr[i]>=48&&arr[i]<=57)
  19.                                         num[2]++;
  20.                         else if(arr[i]>=65&&arr[i]<=90||arr[i]>=97&&arr[i]<=122)
  21.                                         num[0]++;
  22.                         else num[3]++;
  23.                 }
  24.                 str=" 英文字母:"+num[0]+" 数字:"+num[2]+" 空格:"+num[1]+" 其他字符:"+num[3];
  25.                 return str;
  26.         }
  27. }
复制代码
  1. /*求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。*/
  2. class Proble8
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 System.out.println(getNum(1,5));
  7.         }
  8.         public static String getNum(int a,Integer i)
  9.         {
  10.                 String str="";
  11.                 int sum=0;
  12.                 int temp=a;
  13.                 for(int n=0;n<i;n++)
  14.                 {
  15.                         if(n>0)
  16.                                 a=(a*10+temp);
  17.                         sum+=a;
  18.                         if(n<i-1)
  19.                                 str+=a+"+";
  20.                         else str+=a;
  21.                 }
  22.                 str+="="+sum;
  23.                 return str;
  24.         }
  25. }
复制代码
  1. /*一个数如果恰好等于它的因子之和,这个数就称为 "完数 "。例如6=1+2+3.编程     找出1000以内的所有完数*/
  2. class Proble9
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 printNum();
  7.         }
  8.         public static void printNum()
  9.         {
  10.                 int sum=0;
  11.                 String str="";
  12.                 for(int i=2;i<1000;i++)
  13.                 {
  14.                         sum=0;
  15.                         for(int k=1;k<i;k++)
  16.                         {
  17.                                 if(i%k==0)
  18.                                         sum+=k;
  19.                                 if(sum==i)
  20.                                 {
  21.                                         System.out.println(str+i+" ");
  22.                                         break;
  23.                                 }
  24.                         }
  25.                 }
  26.         }
  27. }
复制代码
  1. /*一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高? */
  2. class Proble10
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 System.out.println(getMetre(100,4));
  7.         }
  8.         public static int getMetre(int metre,int n)
  9.         {
  10.                 int count=0;
  11.                 int sum=0;
  12.                 while(metre/2!=0)
  13.                 {
  14.                         if(count==n)
  15.                         {
  16.                                 System.out.println("metre="+metre);
  17.                                 break;
  18.                         }
  19.                         metre/=2;
  20.                         sum+=metre;
  21.                         count++;
  22.                 }
  23.                 return sum;
  24.         }
  25. }
  26. /*package Foundation;
  27. /*
  28. class Proble10
  29. {
  30.         public static void main(String[] args)
  31.         {
  32.                
  33.         }
  34. }*/
复制代码

作者: 谢玉成    时间: 2013-3-3 20:11
{:soso_e204:}抢个楼盘学习学习{:soso_e130:}
作者: 黄文伯    时间: 2013-3-3 21:23
果断支持一下
作者: 陈山洪    时间: 2013-3-4 00:47
多谢楼主分享。。。
作者: 张宝    时间: 2013-3-4 10:02
学习学习
作者: 徐升2013    时间: 2013-3-4 10:08
支持最需要练习题的说
作者: 葛新东    时间: 2013-3-4 15:26
{:soso_e102:}顶分享,目测只能做出来1-2个题{:soso_e113:}{:soso_e113:}java三天小白




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2