文档章节

曾经做过的40道程序设计课后习题总结(一)

闵开慧
 闵开慧
发布于 2014/11/12 10:50
字数 3054
阅读 1744
收藏 158
点赞 5
评论 7

曾经做过的40道程序设计课后习题总结(一)

课后习题目录

1 斐波那契数列
2 判断素数
3 水仙花数
4 分解质因数
5 杨辉三角
6 学习成绩查询
7 求最大公约数与最小公倍数
8 完全平方数
9 统计字母、空格、数字和其它字符个数
10 求主对角线之和
11 完数求解
12 求s=a+aa+aaa+aaaa+aa...a的值
13 高度计算
14 乘法口诀
15 无重复三位数
16 菱形打印
17 利润计算
18 第几天判断
19 从小到大输出数列
20 猴子吃桃问题
21 乒乓球比赛
22 求分数之和
23 求阶乘的和
24 递归求法
25 求不多于5的正整数
26 回文判断
27 星期判断
28 插数入数组
29 取整数的任意位
30 按顺序输出数列
31 位置替换
32 字符串排序
33 贷款器
34 通讯录排序
35 闰年判断
36 二元方程求解
37 密码解译
38 DVD查询
39 电子日历
40 万年历
 

1 斐波那契数列

1.1 题目:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

1.2 源程序

public class Fibonacci {
    public static final int MONTH = 15;
 
    public static void main(String[] args) {
       long f1 = 1L, f2 = 1L;
       long f;
       for (int i = 3; i < MONTH; i++) {
           f = f2;
           f2 = f1 + f2;
           f1 = f;
           System.out.print("第" + i + "个月的兔子对数: ");
           System.out.println(" " + f2);
       }
    }
}

 

1.3 运行结果

3个月的兔子对数:  2

4个月的兔子对数:  3

5个月的兔子对数:  5

6个月的兔子对数:  8

7个月的兔子对数:  13

8个月的兔子对数:  21

9个月的兔子对数:  34

10个月的兔子对数:  55

11个月的兔子对数:  89

12个月的兔子对数:  144

13个月的兔子对数:  233

14个月的兔子对数:  377

1.4 源程序揭秘

    斐波那契数列公式:

2 判断素数

2.1 题目:判断101-200之间有多少个素数,并输出所有素数。
2.2 源程序

public class Prime {
    public static int count = 0;
 
    public static void main(String[] args) {
       for (int i = 101; i < 200; i++) {
           boolean b = true;// 默认此数就素数
           for (int j = 2; j <= Math.sqrt(i); j++) {
              if (i % j == 0) {
                  b = false; // 此数不是素数
                  break;
              }
           }
           if (b) {
              count++;
              System.out.print(i + " ");
           }
       }
       System.out.println("\n素数的个数:" + count);
    }
}

 

2.3 运行结果:

101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199

素数的个数:21

2.4 源程序揭秘

    判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。

3 水仙花数

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

public class shuixian {
    static int b, bb, bbb;
 
    public static void main(String[] args) {
 
       for (int num = 101; num < 1000; num++) {
           shuixian tnn = new shuixian();
           tnn.f(num);
       }
    }
 
    public void f(int m) {
       bbb = m / 100;
       bb = (m % 100) / 10;
       b = (m % 100) % 10;
       if ((bbb * bbb * bbb + bb * bb * bb + b * b * b) == m) {
           System.out.println(m);
       }
    }
}

 

3.3 运行结果:

 

153

370

371

407

3.4 源程序揭秘

    利用for循环控制100-999个数,每个数分解出个位,十位,百位。

4 分解质因数

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

import java.util.Scanner;
 
public class ZhiYinShu {
    static int n, k = 2;
 
    public static void main(String[] args) {
       Scanner s = new Scanner(System.in);
       n = s.nextInt();
       System.out.print(n + "=");
       ZhiYinShu fpf = new ZhiYinShu();
       fpf.f(n);
    }
 
    public void f(int n) {
       while (k <= n) {
           if (k == n) {
              System.out.println(n);
              break;
           } else if (n > k && n % k == 0) {
              System.out.print(k + "*");
              n = n / k;
              f(n);
              break;
           } else if (n > k && n % k != 0) {
              k++;
              f(n);
              break;
           }
       }
    }
}

 

4.3 运行结果:

200

200=2*2*2*5*5

4.4 源程序揭秘

    对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:
    (1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
    (2)如果n>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。
    (3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。

5 杨辉三角

5.1 题目:打印出杨辉三角形(要求打印出10行如下图) 
        1
        1 1
       1 2 1
       1 3 3 1
      1 4 6 4 1
     1 5 10 10 5 1

5.2 源程序

public class YangHuiSanJiao {
    
    public static void main(String[] args) {
 
       int[][] a = new int[10][10];
       for (int i = 0; i < 10; i++) {
           a[i][i] = 1;
           a[i][0] = 1;
       }
       for (int i = 2; i < 10; i++) {
           for (int j = 1; j < i; j++) {
              a[i][j] = a[i - 1][j - 1] + a[i - 1][j];
           }
       }
 
       for (int i = 0; i < 10; i++) {
           for (int k = 0; k < 2 * (10 - i) - 1; k++) {
              System.out.print(" ");
           }
           for (int j = 0; j <= i; j++) {
              System.out.print(a[i][j] + "   ");
           }
           System.out.println();
       }
    }
}

 

5.3 运行结果:

 

                   1  

                 1   1  

               1   2   1  

             1   3   3   1  

           1   4   6   4   1  

         1   5   10   10   5   1  

       1   6   15   20   15   6   1  

     1   7   21   35   35   21   7   1  

   1   8   28   56   70   56   28   8   1  

 1   9   36   84   126   126   84   36   9   1  

5.4 源程序揭秘

    杨辉三角形性质:

        每行数字左右对称,由1开始逐渐变大,然后变小,回到1。  

        第n行的数字个数为n个。  

        第n行数字和为2^(n-1)。  

        每个数字等于上一行的左右两个数字之和。可用此性质写出整个杨辉三角形。   

        第n行的第1个数为1,第二个数为1×(n-1),第三个数为1×(n-1)×(n-2)/2,第四个数为1×(n-1)×(n-2)/2×(n-3)/3…依此类推。  

    算法原理:

        使用一个二维数组yh[][]存储杨辉三角形的数据,行和列的大小为所需要输出的行数Row(本程序中Row为10)。

        使用for循环使杨辉三角中除了最外层(不包括杨辉三角底边)的数为1 ;

        使用语句yh[i][j] = yh[i - 1][j - 1] + yh[i - 1][j]使第i行第j列的数据等于第(i-1)行第(j-1)列的数据与第(i-1)行第(j)列的数据之和,即每个数字等于上一行的左右两个数字之和。

6 学习成绩查询

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

import java.util.Scanner;
 
public class ChaXun {
    static int grade;
 
    public static void main(String[] args) {
       Scanner str = new Scanner(System.in);
       int s = str.nextInt();
       ChaXun fc = new ChaXun();
       grade = fc.compare(s);
       if (grade == 1) {
           System.out.print('A');
       } else if (grade == 2) {
           System.out.print('B');
       } else {
           System.out.println('C');
       }
    }
 
    public int compare(int s) {
       return s > 90 ? 1 : s > 60 ? 2 : 3;
    }
}

 

6.3 运行结果:

90

B

6.4 源程序揭秘

    利用(a>b)?a:b条件运算符来处理。

7 求最大公约数与最小公倍数

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

import java.util.Scanner;
 
public class YueBei {
    public static void main(String[] args) {
       int a, b;
       Scanner s1 = new Scanner(System.in);
        Scanner s2 = new Scanner(System.in);
       a = s1.nextInt();
       b = s2.nextInt();
       YueBei scd = new YueBei();
       int m = scd.division(a, b);
       int n = a * b / m;
       System.out.println("最大公约数: " + m);
       System.out.println("最小公倍数: " + n);
    }
 
    public int division(int x, int y) {
       int t;
       if (x < y) {
           t = x;
           x = y;
           y = t;
       }
 
       while (y != 0) {
           if (x == y)
              return 1;
           else {
              int k = x % y;
              x = y;
              y = k;
           }
       }
       return x;
    }
}

 

7.3 运行结果:

56

78

最大公约数: 2

最小公倍数: 2184

7.4 源程序揭秘

    在循环中,只要除数不等于0,用较大数除以较小的数,将小的一个数作为下一轮循环的大数,取得的余数作为下一轮循环的较小的数,如此循环直到较小的数的值为0,返回较大的数,此数即为最小公约数,最小公倍数为两数之积除以最小公倍数。

8 完全平方数

8.1 题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
8.2 源程序

public class WanQuan {
    public static void main(String[] args) {
       for (long l = 1L; l < 100000; l++) {
           if (Math.sqrt((long) (l + 100)) % 1 == 0) {
              if (Math.sqrt((long) (l + 268)) % 1 == 0) {
                  System.out.println(l + "加100是一个完全平方数,再加168又是一个完全平方数");
              }
           }
       }
    }
}

 

8.3 运行结果:

21100是一个完全平方数,再加168又是一个完全平方数

261100是一个完全平方数,再加168又是一个完全平方数

1581100是一个完全平方数,再加168又是一个完全平方数

8.4 源程序揭秘

    在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后的结果满足如下条件,即是结果。

9 统计字母、空格、数字和其它字符个数

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

import java.util.*;
 
public class Number {
    static int digital = 0;
    static int character = 0;
    static int other = 0;
    static int blank = 0;
 
    public static void main(String[] args) {
       char[] ch = null;
       Scanner sc = new Scanner(System.in);
       String s = sc.nextLine();
       ch = s.toCharArray();
 
       for (int i = 0; i < ch.length; i++) {
           if (ch[i] >= '0' && ch[i] <= '9') {
              digital++;
           } else if ((ch[i] >= 'a' && ch[i] <= 'z') || ch[i] > 'A'
                  && ch[i] <= 'Z') {
              character++;
           } else if (ch[i] == ' ') {
              blank++;
           } else {
              other++;
           }
 
       }
       System.out.println("数字个数: " + digital);
       System.out.println("英文字母个数: " + character);
       System.out.println("空格个数: " + blank);
       System.out.println("其他字符个数:" + other);
    }
 
}

 

9.3 运行结果:

sadf239  asl!~@#*(#)

数字个数: 3

英文字母个数: 7

空格个数: 2

其他字符个数:8

9.4 源程序揭秘

    利用while语句,条件为输入的字符不为 '\n '。

10 求主对角线之和

10.1 题目:求一个3*3矩阵对角线元素之和。

10.2 源程序

import java.util.Scanner;
 
public class DuiJiaoXian {
 
    public static void main(String[] args) {
       Scanner s = new Scanner(System.in);
       int[][] a = new int[3][3];
 
       for (int i = 0; i < 3; i++) {
           for (int j = 0; j < 3; j++) {
              a[i][j] = s.nextInt();
           }
       }
 
       System.out.println("输入的3 * 3 矩阵是:");
       for (int i = 0; i < 3; i++) {
           for (int j = 0; j < 3; j++) {
              System.out.print(a[i][j] + " ");
           }
           System.out.println();
       }
 
       int sum = 0;
       for (int i = 0; i < 3; i++) {
           for (int j = 0; j < 3; j++) {
              if (i == j) {
                  sum += a[i][j];
              }
           }
       }
       System.out.println("对角线和是 " + sum);
    }
}

 

10.3 运行结果:

2 3 4 5

34 4 56 67

12 34 5 6

输入的3 * 3 矩阵是:

2 3 4

5 34 4

56 67 12

对角线和是 48

10.4 源程序揭秘

    利用双重for循环控制输入二维数组,再将a[i][i]累加后输出。

 

    由于博客字数限制,40道程序设计课后习题总结将分4篇帖子进行总结,后面3篇帖子后面会一一贴出,或者可以在自己的博客下载已经总结完的全文 http://my.oschina.net/mkh/blog/340689,里面有全面详细的总结。

 

    原创文章欢迎转载,转载请注明出处!

我的博客即将搬运同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan

 

© 著作权归作者所有

共有 人打赏支持
闵开慧
粉丝 334
博文 600
码字总数 266601
作品 0
青浦
高级程序员
加载中

评论(7)

李华12138
李华12138
←_←
李华12138
李华12138
这不是学C的都会做的题目吗?
sb_gikieng
sb_gikieng
这兔子单性繁殖?
Joseph-Yan
Joseph-Yan
第一个就斐波拉契就错了
牛奋Debug
牛奋Debug
good work
gtd
gtd
好!
java9
java9
can't zan any more
曾经做过的40道程序设计课后习题总结(三)

曾经做过的40道程序设计课后习题总结(三) 课后习题目录 1 斐波那契数列 2 判断素数 3 水仙花数 4 分解质因数 5 杨辉三角 6 学习成绩查询 7 求最大公约数与最小公倍数 8 完全平方数 9 统计字...

闵开慧 ⋅ 2015/08/11 ⋅ 0

OSChina 技术周刊第九期 —— 每周技术精选,值得一看!

每周技术抢先看,总有你想要的! 移动开发 【翻译】介绍 Visual Studio 的 Android 模拟器 【博客】手机腾讯网mt框架之mtwebapp示例解析。 【博客】《Android深入透析》之常用设计模式经验谈...

OSC编辑部 ⋅ 2014/11/16 ⋅ 4

Joel Spolsky在耶鲁大学的演讲(上)

Joel Spolsky是一个美国的软件工程师,他的网络日志"Joel谈软件"(Joel on Software)非常有名,读者人数可以排进全世界前100名。 上个月28号,他回到母校耶鲁大学,与计算机系的学生座谈。他...

阮一峰 ⋅ 2007/12/12 ⋅ 0

Coursera公开课《机器学习基石&技术》课程的感触

背景 最近在修台湾大学林轩田老师在Coursera上的机器学习系列课程《机器学习基石》和《机器学习技术》,前者是后者的先行课程,是基础,后者是前者的升级与补充。一直都有一个想法,就是完成...

练绪宝 ⋅ 2015/02/13 ⋅ 0

新手如何学习C语言/C++,我用一年时间是怎么自学的

最近会有一些初中高中大学的同学问,C语言C++不会不知道怎么学习不会写代码怎么办?大致上都是一些类似的问题吧,回想一下自己走过的路,反复的了很久思考然后写了这篇文章,希望可以对一些迷...

小辰GG ⋅ 2017/12/28 ⋅ 0

《机器学习》(周志华)课后习题参考答案

目录: 周志华《机器学习》课后习题解答系列(二):Ch1 - 绪论 周志华《机器学习》课后习题解答系列(三):Ch2 - 模型评估与选择 周志华《机器学习》课后习题解答系列(四):Ch3 - 线性模...

kchai31 ⋅ 01/04 ⋅ 0

求《数据结构与算法Java语言版》第二版Adam Drozdek著,这本书的习题答案。

最近在温习数据结构与算法,在图书馆找了一本书。书名:《数据结构与算法Java语言版》第二版Adam Drozdek著。很老的一本书了,看了几章很不错,加深了对java的理解。课后习题做了下觉得蛮不错...

chen1922 ⋅ 2012/02/06 ⋅ 0

新手入门,学习《python核心编程》需要注意哪些,怎么提高效率

@fzyzsb 你好,想跟你请教个问题: 你好,我这几天一直在学习《python核心编程》,在网上搜习题答案时找到的你的博客,所以这些天也一直是看着你的博客学习的。我计算机编程只是在学校开的c...

_keyboard_dancer_ ⋅ 2015/04/05 ⋅ 3

linux C实现cp功能

一:背景 看了unix/linux编程实践,跟着书上代码实现了普通文件的拷贝,看到课后习题后需要实现目录之间的拷贝,因此有了本文,我最初实现cp用了180多行代码,后来觉得很多地方可以封装,但是...

Jeff_Linux ⋅ 2014/07/25 ⋅ 0

浅谈程序员的数学修养(转载)

可能有很多朋友在网上看过google公司早几年的招聘广告,它的第一题如下了:{first 10-digit prime found in consecutive digits e}.com,e中出现的连续的第一个10个数字组成的质数。据说当时...

liuzhangheng ⋅ 2014/05/01 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Java Web如何操作Cookie的添加修改和删除

创建Cookie对象 Cookie cookie = new Cookie("id", "1"); 修改Cookie值 cookie.setValue("2"); 设置Cookie有效期和删除Cookie cookie.setMaxAge(24*60*60); // Cookie有效时间 co......

二营长意大利炮 ⋅ 今天 ⋅ 0

【每天一个JQuery特效】淡入淡出显示或隐藏窗口

我是JQuery新手爱好者,有时间就练练代码,防止手生,争取每天一个JQuery练习,在这个博客记录下学习的笔记。 本特效主要采用fadeIn()和fadeOut()方法显示淡入淡出的显示效果显示或隐藏元...

Rhymo-Wu ⋅ 今天 ⋅ 0

Spring JDBC使用方法

普通实现: 1、创建数据表customer。 可以使用任何数据库实现,在项目中要引入相应数据库驱动包并配置相应数据库连接。 2、创建Customer pojo。 Customer类的属性对应数据库的属性,除了为每...

霍淇滨 ⋅ 今天 ⋅ 0

Contos 7 安装Jenkins

Jenkins是一款能提高效率的软件,它能帮你把软件开发过程形成工作流,典型的工作流包括以下几个步骤 开发 提交 编译 测试 发布 有了Jenkins的帮助,在这5步中,除了第1步,后续的4步都是自动...

欧虞山 ⋅ 今天 ⋅ 0

revel

revel install go get github.com/revel/revelgo get github.com/revel/cmd create new app revel new git.oschina.net/zdglf/myapp run app revel run git.oschina.net/zdglf/myapp ot......

zdglf ⋅ 今天 ⋅ 0

49. Group Anagrams - LeetCode

Question 49. Group Anagrams Solution 思路:维护一个map,key是输入数组中的字符串(根据字符排好序) Java实现: public List<List<String>> groupAnagrams(String[] strs) { Map<Strin......

yysue ⋅ 今天 ⋅ 0

spring Email

使用spring发Email其实就是使用spring自己封装携带的一个javamail.JavaMailSenderImpl类而已。这个类可以当一个普通的java对象来使用,也可以通过把它配置变成spring Bean的方式然后注入使用...

BobwithB ⋅ 今天 ⋅ 0

spark 整理的一些知识

Spark 知识点 请描述spark RDD原理与特征? RDD全称是resilient distributed dataset(具有弹性的分布式数据集)。一个RDD仅仅是一个分布式的元素集合。在Spark中,所有工作都表示为创建新的...

tuoleisi77 ⋅ 今天 ⋅ 0

思考

时间一天天过感觉自己有在成长吗?最怕的是时光匆匆而过,自己没有收获!下面总结下最近自己的思考。 认识自己 认识另一个自己,人们常说要虚心听取别人意见和建议。然而人往往是很难做到的,...

hello_hp ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部