每周练习-20180710

'''Description:
A man has a rather old car being worth $2000. He saw a secondhand car being worth $8000. He wants to keep his old car until he can buy the secondhand one.

He thinks he can save $1000 each month but the prices of his old car and of the new one decrease of 1.5 percent per month. Furthermore the percent of loss increases by a fixed 0.5 percent at the end of every two months.

Can you help him? Our man finds it difficult to make all these calculations.

How many months will it take him to save up enough money to buy the car he wants, and how much money will he have left over?

Parameters and return of function:

parameter (positive int, guaranteed) startPriceOld (Old car price)
parameter (positive int, guaranteed) startPriceNew (New car price)
parameter (positive int, guaranteed) savingperMonth
parameter (positive float or int, guaranteed) percentLossByMonth

nbMonths(2000, 8000, 1000, 1.5) should return [6, 766] or (6, 766)
where 6 is the number of months at the end of which he can buy the new car and 766 is the nearest integer to '766.158...' .

Note: Selling, buying and saving are normally done at end of month. Calculations are processed at the end of each considered month but if, by chance from the start, the value of the old car is bigger than the value of the new one or equal there is no saving to be made, no need to wait so he can at the beginning of the month buy the new car:

nbMonths(12000, 8000, 1000, 1.5) should return [0, 4000]
nbMonths(8000, 8000, 1000, 1.5) should return [0, 0]
'''
 

自己

'''
解题思路:
1、使用while循环
2、计算钱
'''


def nbMonths(startPriceOld, startPriceNew, savingperMonth, percentLossByMonth):
    month = 0
    percentLossByMonth = percentLossByMonth
    money = startPriceOld
    while money < startPriceNew:
        month += 1
        startPriceOld *= (1 - percentLossByMonth/100)
        startPriceNew *= (1 - percentLossByMonth/100)
        money = startPriceOld + month * savingperMonth
        if month % 2 == 1:
            percentLossByMonth += 0.5
    return [month, int(round(money - startPriceNew))]

他人

'''
值得学习的地方:
1、简单,直接将money的计算解析式写在while循环中
2、每两个月应该增长的百分比用简单的方式写了出来 (month/2) 利用了除法的特性
'''


def nbMonths(old, new, saving, percent):
    month = 0
    while old - new + saving * month < 0:
        month += 1
        devalue = (100.0 - percent - 0.5 * (month / 2)) / 100.0
        old *= devalue
        new *= devalue
    return [month, round(old - new + saving * month)]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的,下面是回复: 这个练习是要求我们编写一个程序,可以根据用户输入的年份和月份,打印出对应的日历。具体实现可以使用循环来完成,需要考虑到每个月的天数、每周的起始日等因素。这是一个比较综合的练习,可以帮助我们巩固循环和条件语句的使用,同时也可以提高我们的编程能力。 ### 回答2: 这道练习的目的是让我们通过编写程序来实现日历打印功能,从而巩固和练习Java中循环的运用。我们需要实现的是,输入年份和月份,可以打印出该月的日历,以及该月的第一天是星期几。 首先,我们需要了解计算机中时间和日期的存储方式。在计算机中,时间日期被存储为一个整数值,通常是从一个起始时间点开始算起的秒数。在Java中,可以使用Date和Calendar类来操作时间和日期。我们需要使用Calendar类来获取年份、月份、日期等信息。 其次,我们需要了解如何计算一个月的天数。Java中,可以使用Calendar类的getActualMaximum方法来获取某个月的最大天数。同时,我们还需要知道某一天是星期几,这可以使用Calendar类的get方法来获得。 接着,我们需要使用循环语句来完成日历的打印。我们可以使用一个二维数组来存储日历。在打印日历时,我们需要注意格式的调整,如对齐、行末换行等。 最后,我们需要编写一个主程序来测试我们的日历打印功能。在主程序中,我们可以通过Scanner类来获取用户输入的年份和月份,然后调用我们编写的打印日历的方法来输出结果。 总的来说,这道练习对我们掌握Java中循环的应用非常有帮助,并且还锻炼了我们对于日期和时间的处理能力。在以后的学习和工作中,这些知识和技能都将得到广泛的应用。 ### 回答3: 练习-java循环综合练习四之日历打印。 这道题目要求我们能够编写程序,输入年份和月份,打印出当月的日历。具体来说,日历的格式应该是一个7行5列的矩阵,其中第一行为星期一至星期五的名称,第二行开始则是具体的日期(从1号开始),并且按照每周从星期一开始的顺序排列。在打印日历的时候,需要考虑到每个月的天数是不同的,以及各个月之间的闰年情况。 为了实现这个功能,我们需要按照以下步骤进行编码: 1. 接收用户输入,包括年份和月份。 2. 计算当月的天数,需要考虑到闰年的情况。 3. 计算当月的第一天是星期几,以此来确定第一行的输出内容。 4. 循环输出日期,每7个为一组,输出一行。如果月末不在星期日,则需要在最后一行输出空格进行对齐。 5. 打印完毕后,需要输出一条分隔线进行标识,方便用户查看。 在编写代码的过程中,需要注意以下几点: 1. 闰年的计算方式是“4年一润,百年不润,四百年再润”,因此需要进行特判。 2. 计算星期几的时候,需要使用0~6来表示星期日至星期六。 3. 输出一行日期时,需要考虑当月的天数以及星期几,避免输出过多或不足的日期。 综上,我们可以写出如下的伪代码: ``` 输入年份和月份 计算当月的天数,包括闰年计算 计算当月第一天是星期几 打印第一行星期几的名称 定义变量dayCount为1 循环输出日期: 输出dayCount的值,并令dayCount加1 如果dayCount恰好是周六,则换行 判断dayCount是否超过当月天数,如果是则跳出循环 如果最后一天不是周日,则输出空格对齐 输出分隔线 ``` 至此,我们已经完成了这道题目的准备工作。接下来需要进行具体代码实现,这里就不再赘述。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值