打卡第五条

Posted genyuan0

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了打卡第五条相关的知识,希望对你有一定的参考价值。

一、问题描述

设计一座圆周率山

已知圆周率为:3.

1415926535 8979323846 2643383279 5028841971 6939937510

5820974944 5923078164 0628620899 8628034825 3421170679

8214808651 3282306647 0938446095 5058223172 5359408128

4811174502 8410270193 8521105559 6446229489 5493038196

二、设计思路:(如果写的文字无法编程实现,则需要进一步细化,再细分步 骤)

  1.  接收输入的山的高度。

  2.  根据圆周率的值,定义一个字符串变量存储圆周率的值。

  3.  定义一个变量表示每行数字的宽度,初始值为1。

  4.  使用两个嵌套循环逐行输出圆周率数字,外层循环为山的高度,即要输出的行数。内层循环为每行的数字个数。 

  5.  在每行输出前,添加合适数量的空格,使之符合 "pi mountain" 的形状和对称性。

  6.  每次行的宽度增加2,以便能够逐行输出圆周率数字。

  7.  最终输出结果,每行数字右侧没有空格。

 

四、代码实现 

#include<bits/stdc++.h>
using namespace std;
#define PI "314159265358979323846264338327950288419716939937510582097494459230781640628620899862803482534211706798214808651328230664709384460955058223172535940812848111745028410270193852110555964462294895493038196"

int main()

int n,x,i,j;
cin>>n;
string s(PI);
int flag=0;
for(i=0;i<n;i++)
string s1=s.substr(flag,i*2+1);
cout<< setw((n*2-1)/2+1+i)<<s1<<endl;
flag+=i*2+1;

return 0;

 

 

Effective Java 第五条:避免创建不必要的对象

反例:

public class Person 

    private final Date birthDate;

    public Person(Date birthDate) 
        this.birthDate = birthDate;
    

    public boolean isBabyBoomer() //判断婴儿是否在生育高峰期出生
        Calendar gmtCal = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
        gmtCal.set(1946,Calendar.JANUARY,1,0,0,0);
        Date boomStart = gmtCal.getTime();
        gmtCal.set(1965,Calendar.JANUARY,1,0,0,0);
        Date boomEnd = gmtCal.getTime();
        return birthDate.compareTo(boomStart) >= 0
                && birthDate.compareTo(boomEnd) < 0;
    


对于上面方法中,如果检查出生婴儿是否在生育高峰期,每次调用此方法就要初始化Calender、Date对象。并且我们知道boomStart和boomEnd值始终是不变的,我们大可不必每次调用方法就初始化对象。建议修改如下:


正例:

public class PersonNew 
    private final Date birthDate;

    private static Date BOOM_START = null;
    private static Date BOOM_END = null;

    public PersonNew(Date birthDate) 
        this.birthDate = birthDate;
    

    static 
        Calendar gmtCal = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
        gmtCal.set(1946,Calendar.JANUARY,1,0,0,0);
        BOOM_START = gmtCal.getTime();
        gmtCal.set(1965,Calendar.JANUARY,1,0,0,0);
        BOOM_END = gmtCal.getTime();
    

    public boolean isBabyBoomer()
        return birthDate.compareTo(BOOM_START) >= 0
                && birthDate.compareTo(BOOM_END) < 0;
    

以上代码来自《Effective Java》,运行代码感受一下会理解更深刻喔。

以上是关于打卡第五条的主要内容,如果未能解决你的问题,请参考以下文章

第五条知识点

Effective Java 第五条:避免创建不必要的对象

软硬件调试九法:第五条规则 一次只改一个地方

Python打卡第五周

ARTS打卡第五周

每日打卡