黑马程序员技术交流社区

标题: 相信大家为了找问题纠结很久吧,提供点题目,大家练习的时候肯定自然就有问题啦 [打印本页]

作者: 李春阳    时间: 2012-6-6 16:01
标题: 相信大家为了找问题纠结很久吧,提供点题目,大家练习的时候肯定自然就有问题啦
【程序1】   
题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?   
1.程序分析:   兔子的规律为数列1,1,2,3,5,8,13,21....   
【程序2】   
题目:判断101-200之间有多少个素数,并输出所有素数。   
1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,   
则表明此数不是素数,反之是素数。   
【程序3】   
题目:打印出所有的 "水仙花数 ",所谓 "水仙花数 "是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个 "水仙花数 ",因为153=1的三次方+5的三次方+3的三次方。   
1.程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。   
【程序4】   
题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。   
程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:   
(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。   
(2)如果n <> k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。   
(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。   
【程序5】   
题目:利用条件运算符的嵌套来完成此题:学习成绩> =90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。   
1.程序分析:(a> b)?a:b这是条件运算符的基本例子。   
【程序6】   
题目:输入两个正整数m和n,求其最大公约数和最小公倍数。   
1.程序分析:利用辗除法。   
【程序7】   
题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。   
1.程序分析:利用while语句,条件为输入的字符不为 '\n '.   
【程序8】   
题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。   
1.程序分析:关键是计算出每一项的值。   
【程序9】   
题目:一个数如果恰好等于它的因子之和,这个数就称为 "完数 "。例如6=1+2+3.编程   找出1000以内的所有完数。   
【程序10】   
题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在   第10次落地时,共经过多少米?第10次反弹多高?   
【程序11】   
题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?   
1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去   掉不满足条件的排列。   
【程序12】   
题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?   
1.程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。   
【程序13】   
题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?   
1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后的结果满足如下条件,即是结果。请看具体分析:   
【程序14】   
题目:输入某年某月某日,判断这一天是这一年的第几天?   
1.程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于3时需考虑多加一天。   
【程序15】   
题目:输入三个整数x,y,z,请把这三个数由小到大输出。   
1.程序分析:我们想办法把最小的数放到x上,先将x与y进行比较,如果x> y则将x与y的值进行交换,然后再用x与z进行比较,如果x> z则将x与z的值进行交换,这样能使x最小。   
【程序16】   
题目:输出9*9口诀。   
1.程序分析:分行与列考虑,共9行9列,i控制行,j控制列。   
【程序17】   
题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个   第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下   的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。   
1.程序分析:采取逆向思维的方法,从后往前推断。   
【程序18】   
题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。   
1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,   则表明此数不是素数,反之是素数。   
【程序19】   
题目:打印出如下图案(菱形)   
*   
***   
******   
********   
******   
***   
*   
1.程序分析:先把图形分成两部分来看待,前四行一个规律,后三行一个规律,利用双重   for循环,第一层控制行,第二层控制列。   
【程序20】   
题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。   
1.程序分析:请抓住分子与分母的变化规律。
作者: 谭威    时间: 2012-6-6 16:16
第一题 斐波那契数列:用递归函数
public class Test
{
       
        public static long sum(int index){
         long f1=1L;
         long f2=1L;
         long f=0;
         for (int x=0;x<index-2 ;x++ )
         {
                 f=f1+f2;
                 f1=f2;
                 f2=f;
         }
         return f;
       
        }
        public static void main(String []args){
                System.out.println("一年下来共有兔子:"+sum(12));
        }
}
作者: 谭威    时间: 2012-6-6 16:20
第二题
/*
需求:找出101-200之间所有的素数
分析:素数就是只能被1和自己整除的数,首先从1遍历到200然后,判断哪个是素数,是就输出,否则就跳过
需要两层循环来解决,外循环遍历101-200,内循环判断是否为素数,在判断的过程中,根据素数的定义,需要使用循环让这个数
对2,3,4...做除法运算,一旦能整除,说明这个数不是素数,就不需要再拿这个数对后面的数运算,所有用break跳过
*/
public class SuShu
{
        public static void main(String []args)
        {
                int i=0,j=0;
                //外循环遍历所有的数
                for(i=101;i<=200;i++)
                {
                        //内循环判断是否为素数
                   for(j=2;j<i;j++)
                        {
                      if(i%j==0)
                                {
                                        break;
                                }
                        }
                        if(i==j)
                        {
                                System.out.println("找到素数"+i);
                        }
                }
        }
}
作者: 谭威    时间: 2012-6-6 16:21
第二题
/*
需求:找出101-200之间所有的素数
分析:素数就是只能被1和自己整除的数,首先从1遍历到200然后,判断哪个是素数,是就输出,否则就跳过
需要两层循环来解决,外循环遍历101-200,内循环判断是否为素数,在判断的过程中,根据素数的定义,需要使用循环让这个数
对2,3,4...做除法运算,一旦能整除,说明这个数不是素数,就不需要再拿这个数对后面的数运算,所有用break跳过
*/
public class SuShu
{
        public static void main(String []args)
        {
                int i=0,j=0;
                //外循环遍历所有的数
                for(i=101;i<=200;i++)
                {
                        //内循环判断是否为素数
                   for(j=2;j<i;j++)
                        {
                      if(i%j==0)
                                {
                                        break;
                                }
                        }
                        if(i==j)
                        {
                                System.out.println("找到素数"+i);
                        }
                }
        }
}
作者: 赵玮_Tom    时间: 2012-6-6 17:25
楼主圣明{:soso_e113:} 拿来练练手
作者: 马超    时间: 2012-6-6 17:55
谭威 发表于 2012-6-6 16:16
第一题 斐波那契数列:用递归函数
public class Test
{

现在看起来这个问题还是挺简单的嘛 呵呵
作者: 杨康    时间: 2012-6-6 18:21
顶起  想找这种将理论运用到实际的题很久了
作者: 张頔    时间: 2012-6-6 20:00
第三题
public class test1 {
     public static void main(String[] args) {
             for(int i=100;i<=999;i++){
                     int j = (int) (Math.pow(i/100,3)+Math.pow(i/10%10,3)+Math.pow(i%100%10,3));
                     if(i==j){
                             System.out.println(i);
                     }
                     else
                             continue;
             }
     }
}
作者: 信义明    时间: 2012-6-6 20:21
第十题
题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在   第10次落地时,共经过多少米?第10次反弹多高?  
public class Test10 {
public static void main(String[] args) {
      double h = 100,s = 100;
      for(int i=1; i<10; i++) {
      s = s + h;
      h = h / 2;
     }
     System.out.println("第10次落地时经过路程:" + s);
     System.out.println("第10次反弹高度:" + h / 2);
}
}

作者: 张頔    时间: 2012-6-6 20:28
第四题
import java.util.Scanner;

public class zhishu{
        static boolean odd(int n){//判断是不是奇数
                if(n==2||n==3) return true;
                if(n%2==0) return false;
                int i;
                for(i=3;i<=n/2;i+=2)
                        if(n%i==0) return false;
                return true;
    }

        public static void main(String[] args){
                Scanner in=new Scanner(System.in);
                System.out.println("输入数值");
                int n=in.nextInt();
                int i;
                System.out.print(n+"=");
                for(i=2;i<=n;i++){
                        if(!odd(i)) continue;//因为求得是质数的乘积,所以取出小于等于n的质数来
                        if(n%i==0){//能被 i 整除
                                while(true){
                                        System.out.print(i);
                                        n=n/i;
                                        if(n!=1) System.out.print("*");
                                        if(n%i!=0) break;
                                }
                        }
                }
                System.out.println();
                  }
}
作者: 张頔    时间: 2012-6-6 20:33
第五题
import java.util.Scanner;

public class chengji {
        public static void main(String[] args) {
                Scanner in=new Scanner(System.in);
                System.out.println("输入乘成绩");
                float n=in.nextFloat();
                String s = (n>=90.0)?"A":((n>=60)?"B":"C");
                System.out.println(s);
        }
}
作者: 张頔    时间: 2012-6-6 20:34
???
String s = (n>=90.0)?"A":((n>=60)?"B":"C");
作者: 张頔    时间: 2012-6-6 20:37
我汗了
{:soso_e115:}  ==》“一个冒号一个左括号”
作者: 信义明    时间: 2012-6-6 20:51
第6题:输入两个正整数m和n,求其最大公约数和最小公倍数。   
1.程序分析:利用辗除法
import java.util.*;
public class Test6{
        public static void main(String[] args) {
                int m,n,p;
                Scanner scanner = new Scanner(System.in);
                System.out.print( "请输入两个整数: ");
                m = scanner.nextInt();
                n = scanner.nextInt();
                      p = fun(m,n);
                      int q = m * n / p;//最小公倍数为两数之积除以最大公约数
                      System.out.println("最大公约数: " + p);
                      System.out.println("最小公倍数: " + q);
        }

        public static int fun(int x, int y) {//单独定义一个求最大公约数的方法
                     int t;
                     if(x < y) {
                              t = x;
                              x = y;
                              y = t;
                     }  
                     while(y != 0) {                        //辗除法
                              if(x == y) return x;
                              else {
                                       int k = x % y;
                                       x = y;
                                       y = k;
                              }
                     }
                     return x;
        }
}

作者: 张頔    时间: 2012-6-6 21:07
第六题
import java.util.Scanner;

public class chengji {
        public static void main(String[] args) {
                Scanner sc= new Scanner(System.in);
                int a,b;
                System.out.print("请输入a:");
                a= sc.nextInt();
                System.out.print("请输入b:");
                b= sc.nextInt();
                System.out.println(Max(a, b));
                System.out.println(Min(a, b));
        }


        public static int Max(int a, int b) { // a与b的最大公约数
                while(b%a!=0){      //运用递归调用将求余之后的值作为a
                        int temp=b%a;   //将之前的a作为b,直到b%a值为0为止结束循环
                        b=a;
                        a=temp;
                }
                return a;
        }


        public static int Min(int a, int b) {// a与b的最小公倍数
                return a*b/Max(a,b);   //公倍数就是将两的积除以最大公约数
        }
}
作者: 蔡建荣    时间: 2012-6-6 21:20
java需要很多的数学问题吗? 我数学很烂啊~ 我一看到这么数学问题就怵
作者: 张頔    时间: 2012-6-6 21:51
第七题
import java.util.*;
//
public class test2 {
        public static void main(String[] args){
               
                System.out.println("输入");
                Scanner in=new Scanner(System.in);
                String s = in.nextLine();
                int zimu=0,shuzi=0,kongge=0,qita=0;

               
                char[] ch = s.toCharArray();
                for(char c:ch){
                        if(c<='z'&&c>='A'){
                                zimu++;
                        }
                        else if(c>='0'&&c<='9'){
                                shuzi++;
                        }
                        else if(c==' '){
                                kongge++;
                        }
                        else qita++;
                        }
                System.out.println("zimu="+zimu);
                System.out.println("shuzi="+shuzi);
                System.out.println("kongge="+kongge);
                System.out.println("qita="+qita);
       
}
}


至于利用while语句,条件为输入的字符不为 '\n '. 没搞出来  求助
作者: 张頔    时间: 2012-6-6 22:37
第八题
import java.util.Scanner;


public class test3 {
        public static void main(String[] args){
                Scanner sc= new Scanner(System.in);
                int s,a;
                System.out.print("请输入s:");
                s= sc.nextInt();
                System.out.print("请输入a:");
                a= sc.nextInt();
                add(s,a);               
        }
        public static void add(int s,int a){
                String s1 = a+"";
                int s2=a;
                System.out.print("s="+a);
                for(int i=1;i<s;i++){
                        s1=s1+a;//这地方s1是字符串
                        s2=s2+Integer.parseInt(s1);//这地方s2是int型
                        System.out.print("+"+s1);
                       
                }
                System.out.println("="+s2);
        }
}
作者: 张頔    时间: 2012-6-6 22:37
第八题
import java.util.Scanner;


public class test3 {
        public static void main(String[] args){
                Scanner sc= new Scanner(System.in);
                int s,a;
                System.out.print("请输入s:");
                s= sc.nextInt();
                System.out.print("请输入a:");
                a= sc.nextInt();
                add(s,a);               
        }
        public static void add(int s,int a){
                String s1 = a+"";
                int s2=a;
                System.out.print("s="+a);
                for(int i=1;i<s;i++){
                        s1=s1+a;//这地方s1是字符串
                        s2=s2+Integer.parseInt(s1);//这地方s2是int型
                        System.out.print("+"+s1);
                       
                }
                System.out.println("="+s2);
        }
}
作者: 张頔    时间: 2012-6-6 23:19
第九题

public class ceshi {
        public static void main(String[] args){
                       
                int sum;
                  for(int i=1; i<1000; i++)
                   {
                             sum=0;
                             for(int j=1; j<=i/2; j++){
                                     if(i%j==0) sum+=j;
                             }
                             if(sum==i){
                                     System.out.println(i);
                             }
                 }
}
}
作者: 张頔    时间: 2012-6-6 23:38
第十一题
public class ceshi {
        public static void main(String[] args){
                System.out.println("总共有"+4*3*2+"个");
                for(int i=1;i<5;i++){
                        for(int j=1;j<5;j++){
                                for(int k=1;k<5;k++){
                                        if(i!=j&&i!=k&&j!=k){
                                                System.out.println(i+""+j+""+k);                                               
                                        }
                                }
                        }                       
                }
        }
}
作者: 张頔    时间: 2012-6-7 23:06
//12题
import java.util.Scanner;
public class jiangjin {
        public static void main(String[] args){
                Scanner sc= new Scanner(System.in);
                int a;//a是利润b奖金
                float b = 0;
                System.out.print("请输入利润(单位:万元):");
                a= sc.nextInt();
                if(a<=10){
                        b=(float) (a*0.1);
                }else if(a>10&&a<=20){
                        b=(float) (1+(a-10)*0.075);
                }else if(a>20&&a<=40){
                        b=(float) (1+0.75+(a-20)*0.05);
                }else if(a>40&&a<=60){
                        b=(float) (1+0.75+0.5+(a-40)*0.03);
                }else if(a>60&&a<=100){
                        b=(float) (1+0.75+0.5+0.3+(a-60)*0.015);
                }else if(a>100){
                        b=(float) (1+0.75+0.5+0.3+0.15+(a-100)*0.01);
                }
                System.out.println("奖金是:"+b+"万元");
        }
}
作者: 张頔    时间: 2012-6-7 23:07
//13题
//关键是判断经过开平方后是不是整数
public class sqrtDemo {
        public static void main(String[] args){
                for(int i=0;i<100000;i++){
                        double a = Math.sqrt(i+100);//Math.sqrt()返回的是double类型的
                        double b = Math.sqrt(i+100+168);
                        if(isInt(a)&&isInt(b)){
                                System.out.println(i);
                                break;
                        }
                }
        }
        public static boolean isInt(double d){//判断是不是整数,例如是为了区分12.0和12.1
                int i = (int)d;
                if(i==d){
                        return true;
                }else return false;
                }
        }

作者: 张頔    时间: 2012-6-7 23:09
//为了简便  年月日单个输入
//关键的是判断是不是闰年
import java.util.Scanner;
public class days {
        public static void main(String[] args){
                Scanner sc= new Scanner(System.in);
                int day=0;//本年中的天数
                int y,m,d;
                System.out.print("请输入年份:");
                y= sc.nextInt();
                System.out.print("请输入月份:");
                m= sc.nextInt();
                System.out.print("请输入日:");
                d= sc.nextInt();
                if(y%400==0||(y%4==0&&y%100!=0)){//判断是不是闰年
                        day++;                                                //是润年加上一天
                }
                while(m!=0){     //为了节约代码使用了循环
                        m--;
                        if(m==1||m==3||m==5||m==8||m==10||m==12){
                                day=day+31;
                        }else if(m==4||m==6||m==9||m==11){
                                day=day+30;
                        }else if(m==2){//不管是不是闰年都是加上个28天因为前边已经根据是不是闰年已经加了
                                day+=28;
                        }
                       
                }
                day=day+d;
                System.out.println("这是这一年的第:"+day+"天");
        }
}
作者: 张頔    时间: 2012-6-7 23:20
//15题
import java.util.Scanner;
public class daxiao {
        public static void main(String[] args){
                Scanner sc= new Scanner(System.in);
                int a,b,c;
                System.out.print("请输入第一个数:");
                a= sc.nextInt();
                System.out.print("请输入第二个数:");
                b= sc.nextInt();
                System.out.print("请输入第三个数:");
                c= sc.nextInt();
                while(true){
                        int temp=0;
                        if(a>b){
                                temp = a;
                                a = b;  
                                b = temp;
                        }
                        if(b>c){
                                temp = b;
                                b = c;  
                                c = temp;
                        }
                        if(a<b&&b<c){//如果不成立就继续循环下去
                                break;
                        }
                }
                 System.out.println("由小到大:" + a + ", " +b+", "+ c );
        }
}
作者: 张頔    时间: 2012-6-8 21:10
//16题
//双层循环
public class biao {
        public static void main(String[] args){
                for(int i=1;i<=9;i++){
                        for(int j=1;j<=i;j++){
                                System.out.print(j+"*"+i+"="+(i*j)+"  ");
                        }
                        System.out.println();
                }
        }
}



//19题
public class pattern {
        public static void main(String[]args){
        for(int i = 0;i < 4;i++){
            for(int j = 1;j <= (2*i + 1);j++){
                System.out.print("*");
            }
            System.out.println();
        }
        for(int i = 2;i >=0;i--){
            for(int j = (2*i + 1);j > 0;j--){
                System.out.print("*");
            }
            System.out.println();
        }
    }
}
作者: 张頔    时间: 2012-6-8 21:11
//20题
//
public class sum {
        public static void main(String[] args){
                double s = 0;
                int a=1,b=2;
                System.out.println("s=");
                for(int i=1;i<=20;i++){
                        s=s+(double)b/a;//注意这地方要将b/a转化为double类型要不然都是1了
                        System.out.print(b+"/"+a+"+");
                        int t;
                        t=a;
                        a=b;
                        b=t+a;
                }
                System.out.println();
                System.out.println("前20项之和是:"+s);
        }
}




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