Java经典逻辑编程50题_第1页
Java经典逻辑编程50题_第2页
Java经典逻辑编程50题_第3页
Java经典逻辑编程50题_第4页
Java经典逻辑编程50题_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Java经典逻辑编程50题【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 1) 程序分析:兔子的规律为数列1,1,2,3,5,8,13,21. (斐波那契数列)2) 参考代码import java.util.Scanner;public class RabbitNum     public static void main(String args)         

2、;Scanner in = new Scanner(System.in);                 System.out.println("你想知道前几个月的兔子的数量");        int month = in.nextInt();       

3、;          int mon = new intmonth;        if(month < 3)            System.out.println("第" + month + "个月有 1 对兔子,共 2 只"); &#

4、160;              else            for(int i = 2; i < month; i+)                mon0 = m

5、on1 = 1;                moni = moni - 1 + moni - 2;                System.out.printf("第 %d 个月有 %d 对兔子,共 %d 只兔子n", i + 1, moni, 2 *

6、 moni);                【程序2】 题目:判断101-200之间有多少个素数,并输出所有素数。 1 ) 程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除, 则表明此数不是素数,反之是素数。 (java.lang.Math.sqrt(double a) 返回正确舍入的一个double值的正平方根)2) 参考代码public class Prime   

7、60; public static void main(String args)         System.out.print("101-200中的素数有:");        for(int i = 101; i <= 200; i+)            if(isPrim

8、e(i)                System.out.print(" " + i);                 /isPrime方法用来判断一个数是否是素数    private static b

9、oolean isPrime(int i)         for(int j = 2; j <= Math.sqrt(i); j+)            if(i % j = 0)                return fa

10、lse;                return true;    【程序3】 题目:打印出所有的 "水仙花数 ",所谓 "水仙花数 "是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个 "水仙花数 ",因为153=1的三次方5的三次方3的三次方。1 ) 程序分析:利用for循环控制100-999个数,每个数分解出个位,

11、十位,百位。 2) 参考代码public class NarcissisticNum     public static void main(String args)         System.out.print("水仙花数有:");        for(int num = 100; num < 1000; num+)    

12、        if(isNarcissisticNum(num)                System.out.println(" " + num);               &

13、#160; /一个判断正整数是否为水仙花数的方法    private static boolean isNarcissisticNum(int num)         / TODO Auto-generated method stub        int a = num / 100;        &#

14、160; /分离出百位 a        int b = (num / 10) % 10;    /分离出十位 b        int c = num % 10;           /分离出个位 c        int su

15、m = a * a * a + b * b * b + c * c * c;        if(sum = num)            return true;        else           

16、; return false;    【程序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的值,重复执行第一步。 

17、参考代码:import java.util.Scanner; public class PrimeFactorOfInteger     public static void main(String args)         Scanner input = new Scanner(System.in);             

18、0;   System.out.println("请输入一个大于 3 的正整数");        int num = input.nextInt();        System.out.print(num + "的素因数:");        factor(num); 

19、60;       private static void factor(int num)         for(int i = 2; i <= Math.sqrt(num); i+)            if(num % i = 0)       

20、         System.out.print(i + " * ");                if(isPrime(num / i)               

21、60;    System.out.println(num / i);                                else        &

22、#160;           factor(num / i);                break;                  

23、60;          private static boolean isPrime(int i)         for(int j = 2; j <= Math.sqrt(i); j+)            if(i % j = 0)    &#

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

25、0;1. 程序分析:(a> b)?a:b这是条件运算符的基本例子。 参考代码import java.util.Scanner; public class ConditionalOperator     public static void main(String args)         Scanner in = new Scanner(System.in);      

26、0;          System.out.println("请输入你的分数");        int score = in.nextInt();                 if(score >= 90) 

27、;           System.out.println("A  恭喜");                else if(score >= 60)            

28、;System.out.println("B  不错");                else            System.out.println("C  加油");       

29、;     【程序6】 题目:输入两个正整数m和n,求其最大公约数和最小公倍数。 1.程序分析:利用辗除法。 参考代码import java.util.Scanner; public class Example6     public static void main(String args)         Scanner in = new Scanner(System.in);

30、60;                System.out.println("请输入第一个数");        int a = in.nextInt();        System.out.println("请输入第二个数");

31、0;       int b = in.nextInt();                 System.out.println("这两个数的最大公约数是 " + MaxCommonDivisor(a, b);        System.out.print

32、ln("这两个数的最小公倍数是 " + MinCommonMultiple(a, b);         private static int MaxCommonDivisor(int a, int b)         if(a < b)            int temp =

33、 a;            a = b;            b = temp;                while(a % b != 0)    &

34、#160;       int temp = a % b;            a = b;            b = temp;             

35、;   return b;         private static int MinCommonMultiple(int a, int b)     return a * b / MaxCommonDivisor(a, b);    【程序7】 题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。 1. 程序分析:利用while语句,条件为输入的字符不为

36、 'n '.   参考代码import java.util.Scanner; public class Statistic     public static void main(String args)            Scanner in = new Scanner(System.in);     &#

37、160;           System.out.println("Input one sentance.");        String s = in.nextLine();                 int

38、 letter = 0, symbol = 0, space = 0, number = 0;        char strArray = s.toCharArray();        for (int i = 0; i < strArray.length; i+)             

39、0;      char c =  strArrayi;            if('a' <= c && c <= 'z') | ('A' <= c && c  <= 'Z')        &#

40、160;       letter+;            else if(48 <= c  && c <= 57)      /注意!数字0-9的ASCII码是48-57            &#

41、160;   number+;            else if(c = ' ')                space+;            

42、;else                symbol+;                System.out.println("This sentance have " + letter + " letters, "); 

43、60;      System.out.println("have "+ number + " numbers, ");        System.out.println("have " + space + " spaces, " + "and " + symbol + " symbols.");   &#

44、160;【程序8】 题目:求s=a+aa+aaa+aaaa+aa.a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。 1.程序分析:关键是计算出每一项的值。 参考代码import java.util.Scanner; public class Example8     public static void main(String args)         Scanner

45、input = new Scanner(System.in);                 System.out.println("请输入相加的基数");        int n = input.nextInt();        System

46、.out.println("请输入要相加的个数");        int i = input.nextInt();                 long total = 0L;        long temp = n;  

47、      for(int j = 0; j < i; j+)            total += temp;            temp = temp * 10 + n;         

48、60;      System.out.println("和为" + total);    【程序9】 题目:一个数如果恰好等于它的因子之和,这个数就称为 "完数 "。例如6=123.编程找出1000以内的所有完数。 参考代码public class WholeNumber     public static void main(String args)   

49、;      System.out.println("1000以内的完数有:");        for(int num = 1; num < 1000; num+)            isWholeNumber(num);       &

50、#160;         private static void isWholeNumber(int num)         int sum = 0;        for(int i = 1; i <= num / 2; i+)         &

51、#160;  if(num % i = 0)                sum += i;                           &

52、#160;         if(sum = num)            System.out.println(num);    【程序10】 题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高? 1:注意弹球一上一下的距离2:参考代码import j

53、ava.util.Scanner; public class Pinball     public static void main(String args)            Scanner in = new Scanner(System.in);              

54、0;  System.out.println("请输入原始高度。");        double s = in.nextDouble();        System.out.println("要求第几次落地后的距离。");        int n = in.nextInt(); &#

55、160;               double total = s;        System.out.printf("第%d次落地后共走的距离是:" , n);        if(n = 1)     

56、0;              System.out.println(total);            System.out.printf("第%d次反弹的距离是%f。", n, s / 2);          &

57、#160;     else                    for(int i = 1; i < n; i+)                   

58、;         s = s / 2;                total += 2 * s;         /一上一下共两倍的弹跳距离          &#

59、160;             System.out.print(total);            System.out.println();            System.out.printf("第%d次反

60、弹的距离是%f。", n, s / 2);            【程序11】 题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 1. 程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去掉不满足条件的排列。2. 参考代码public class Three_digitNum     public static void main(String a

61、rgs)         int i, j, k;        /分别代表个、十、百位        int num;            /用来输出符合要求的三位数       

62、60;int count = 0;          /用来统计符合要求的三位数有多少个                 System.out.println("符合要求的三位数有:");        for(i = 1; i <=

63、 4; i+)            for(j = 1; j <= 4; j+)                if(i != j)          /提前把有重复的部分情况过滤掉,减少运行次数,优化性能 &#

64、160;                  for(k = 1; k <= 4; k+)                        if(i != k &&

65、; j != k)                            num = i + j * 10 + k * 100;                

66、            System.out.println(num);                            count+;     

67、;                                                  

68、;                 System.out.println("符合要求的三位数共有" + count + "个");    【程序12】 题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;2

69、0万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成 3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数? 1. 程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。 【程序13】 题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少? 1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后的结果满

70、足如下条件,即是结果。参考代码public class FundNum     public static void main(String args)            long i, j, k;        for(i = 1; i < 100000; i +)       

71、;             for(j = 0; j < 1000; j+)                            if(j * j = i + 100) &

72、#160;                                  for(k = j; k < 1000; k+)          

73、0;                                 if(k * k = i + 268)             

74、60;              System.out.println(i);                                

75、;                            【程序14】 题目:输入某年某月某日,判断这一天是这一年的第几天? 1. 程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于3时需考虑多加一天。 2. 参考代码import

76、 java.util.Scanner; public class DayOfYear     public static void main(String args)            Scanner in = new Scanner(System.in);              

77、   System.out.println("请输入年份。");        int year = in.nextInt();        System.out.println("请输入月份。");        int month = in.nextInt();  

78、;      System.out.println("请输入日期。");        int day = in.nextInt();                 int sum = 0;      

79、60; switch(month - 1)                case 0: sum = 0; break;        case 1: sum = 31; break;        case 2: sum = 59; break;  

80、;      case 3: sum = 90; break;        case 4: sum = 120; break;        case 5: sum = 151; break;        case 6: sum = 181; break;   &#

81、160;    case 7: sum = 212; break;        case 8: sum = 243; break;        case 9: sum = 273; break;        case 10: sum = 304; break;    

82、60;   case 11: sum = 334; break;                if(month > 2)&&isLeap(year)            System.out.printf("这天是这年第%d天。", sum +

83、 day + 1);        else            System.out.printf("这天是这年第%d天。", sum + day);             private static boolean isLeap(int y

84、ear)            if(year % 100 != 0)&&(year % 4 = 0) | (year % 400 = 0)            return true;        else    &#

85、160;       return false;    【程序15】 题目:输入三个整数x,y,z,请把这三个数由小到大输出。 1. 程序分析:我们想办法把最小的数放到x上,先将x与y进行比较,如果x> y则将x与y的值进行交换,然后再用x与z进行比较,如果x> z则将x与z的值进行交换,这样能使x最小。 2. 参考代码import java.util.Scanner; public class MinOfThre

86、e     public static void main(String args)         Scanner in = new Scanner(System.in);                 System.out.println("请输入三个整数");  

87、;      System.out.println("请输入第1个整数");        int a = in.nextInt();        System.out.println("请输入第2个整数");        int b = in.nextI

88、nt();        System.out.println("请输入第3个整数");        int c = in.nextInt();        System.out.print("从小到大的顺序为:");        i

89、f(a < b)            if(b < c)                System.out.printf("%d<%d<%d", a, b, c);         

90、   else                if(a < c)                    System.out.printf("%d<%d<%d", a, c

91、, b);                else                    System.out.printf("%d<%d<%d", c, a, b);   &#

92、160;                else            if(c < b)                System.out.print

93、f("%d<%d<%d", c, b, a);            else                if(c < a)             

94、;       System.out.printf("%d<%d<%d", b, c, a);                else                 

95、   System.out.printf("%d<%d<%d", b, a, c);                        【程序16】 题目:输出9*9口诀。 1. 程序分析:分行与列考虑,共9行9列,i控制行,j控制列。 2. 参考代码public cla

96、ss JiujiuBiao     public static void main(String args)            for (int i = 1; i < 10; i+)                    for

97、(int j = 1; j <= i; j+)                            int total = 0;               &#

98、160;total = i * j;                                 System.out.printf("%d * %d = %-5d", j, i, total);    &

99、#160;                   System.out.println();            【程序17】 题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天

100、剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。 1. 程序分析:采取逆向思维的方法,从后往前推断。 2. 参考代码public class EatPeach     public static void main(String args)         int total = 1;           

101、0;     /day = 1的时候,算出来的total其实是第9天有的桃子        /day = 9的时候,算出来的total就是第1天的桃子        for(int day = 1; day < 10; day+)            total

102、 = 2 * (total + 1);                         System.out.println("一开始共有 " + total + " 桃子");    【程序18】 题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,

103、乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。 1. 程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。 2. 参考代码public class MatchCP     public static void main(String args)         char i, j, k;  &

104、#160;    /i,j,k分别是a,b,c的对手        for(i = 'X' i <= 'Z' i+)            for(j = 'X' j <= 'Z' j+)         

105、;       if(i != j)                    for(k = 'X' k < 'Z' k+)              &

106、#160;         if(i != k && j != k)                            if(i != 'X' && k != 'X

107、9; && k != 'Z')                                System.out.printf("a - %cnb - %cnc - %c", i, j, k);  

108、0;                                                 

109、0;                               【程序19】 题目:打印出如下图案(菱形)代码略【程序20】 题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13.求出这个数列的前20项之和。 1. 程序分析:请抓住分子与

110、分母的变化规律。 2. 参考代码public class FractionSum     public static void main(String args)         float i = 2.0f, j = 1.0f;       /i为分子,j为分母        float num = 2.0f; &#

111、160;     /num是分数,sum是分数的和        float sum = 2.0f;                 for(int m = 1; m < 20; m+)     /m = 1时,num已经是第2个加数了,所以m < 20&#

112、160;           i = i + j;            j = i - j;      /变化前的 i 赋值给 j            num = i / j; 

113、0;          sum += num;                System.out.println("前20个分数的和为 " + sum);    【程序21】 题目:求1+2!+3!+.+20!的和 1. 程序分析:此程序只是把累加变成了累乘

114、。 2. 参考代码import java.util.Scanner; public class Recursion     public static void main(String args)         Scanner in = new Scanner(System.in);              

115、60;  System.out.println("你想计算到哪个数的阶乘的和");        int num = in.nextInt();                 long temp = 0L;        lon

116、g sum = 0L;        for(int i = 1; i <= num; i+)            temp = recursion(i);            sum += temp;     

117、0;          System.out.println("计算到" + num + "的阶乘和是 " + sum);                 /计算某个数 num 的阶乘    private static long recursion

118、(int num)         if(num > 1)            return num * recursion(num - 1);                return 1;   &

119、#160;【程序22】 题目:利用递归方法求5!。 1. 程序分析:递归公式:fn=fn_1*4!   2. 参考代码:【程序23】 题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大? 1. 程序分析:利用递归的方法,递归分为回推和递推两个阶段。要想知道第五个人岁数,需知道第四人的岁数,依次类推,推到第一人(10岁),再往回推。2. 参考代码 【程序24

120、】 题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。 参考代码import java.util.Scanner; public class ReversedNum     public static void main(String args)         Scanner in = new Scanner(System.in);       

121、          System.out.println("请输入一个不多于5位的整数");        int num = in.nextInt();                 int n = 1;  

122、;      System.out.print("这个数的逆序为:");        while(num / 10 > 0)            n+;            int tmp

123、 = num % 10;            System.out.print(tmp);            num /= 10;                System.out.print

124、ln(num);        System.out.println("这个数共有" + n + "位数");    【程序25】 题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。 【程序26】 题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。 1. 程序分析:用情况语句比较好,如果第一个字母一样,则判断用情况

125、语句或if语句判断第二个字母。 2. 参考代码import java.util.Scanner; public class WeekDay     public static void main(String args)         Scanner in = new Scanner(System.in);            

126、60;    char firstletter, secondletter;     /存放第一第二个字母        System.out.println("请输入第一字母");        String letter = in.next();       

127、60;         firstletter = letter.charAt(0);        switch(firstletter)        case 'm':        case 'M':   &#

128、160;         System.out.println("是星期一");break;        case 'w':        case 'W':           

129、60;System.out.println("是星期三");break;        case 'f':        case 'F':            System.out.println("是星期五");break; 

130、60;      case 't':        case 'T':            System.out.println("仅由该字母无法判断出星期几,请输入第二个字母");        

131、0;   letter = in.next();            secondletter = letter.charAt(0);            if(secondletter = 'u' | secondletter = 'U')    &#

132、160;           System.out.println("是星期二");                break;            else if(secondletter = 'h' | secondletter = 'H')                System.out.println("是星期四");           &

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论