打卡第五条
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。
-
使用两个嵌套循环逐行输出圆周率数字,外层循环为山的高度,即要输出的行数。内层循环为每行的数字个数。
-
在每行输出前,添加合适数量的空格,使之符合 "pi mountain" 的形状和对称性。
-
每次行的宽度增加2,以便能够逐行输出圆周率数字。
-
最终输出结果,每行数字右侧没有空格。
四、代码实现
#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》,运行代码感受一下会理解更深刻喔。
以上是关于打卡第五条的主要内容,如果未能解决你的问题,请参考以下文章