C++算法题——知识点
素数:
质数又称素数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数(素数)
C++算法题——简单循环篇
1.问题描述:
1.super家养了一对刚出生的兔子, 兔子出生第2月后每月都会生一对小兔子, 小兔子出生后同样第2月后也会每月生一对兔子
super想知道:如果兔子不死 ,n月后家里会有多少对兔子?
设计一个程序: 输入n,输出兔子数量 (2<n<30)
样例输入: 7 样例输出:13
样例输入: 12 样例输出: 144
思路:
经典的斐波那契数列,“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(0)=1,F(1)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N*)
代码:
int main(){
int n=0;
// 用于存储当月 以及前1,2个月的兔子数,即f1和f2
int f1=1,f2=1,f3=0;
//--接收输入--
cin>>n;
//--数据处理--
//前两个月不生兔子
// 每个月的兔子数量 = 上一个月兔子数 + 上上一个月兔子数
n -= 2;
while (n--) {
f3 = f1 + f2;
f1 = f2;
f2 = f3;
}
//--输出--
cout<<f3;
}
2.问题描述:
小球从某一高度落下,每次落地后反跳回原来高度的一半,再落下。
输入弹球的初始高度M和回弹次数N, 输出弹球第N次回弹后的高度和达到该高度后所经过的距离(保留两位小数)
(0<M<1000, 0<N<50)
思路:
除了第一段下降和最后一段升起的路径只走了一次,其他路径均走了两次。注意保留两位小数的写法%.2lf
代码:
int main(){
double M,result;
int N;
cin>>M>>N;
result=M;//第一段路程
for (int i = 0; i <N ; ++i) {
M=M/2;
result=result+M*2;
}
result=result-M;//最后一段路程
printf("%.2lf,%.2lf",M,result);
}
C++算法题——嵌套循环篇(一)
1.问题描述(素数):
设计一个程序, 输入N, 输出0~N之间的所有素数(0<N<MAX_INT)
代码:
//素数(0<N<MAX_INT)
int main(){
int n;
int index = 1;
int flag=0; //标识符 值为1表示素数 值为0表示非素数
scanf("%d",&n);
for (int i = 2; i <=n ; ++i) {
flag=0;
for( index =2;index<sqrt(i);++index){
// 如果i%index为0 则该数字是非素数 0表示假 !取反为真
if(i%index==0){
flag=1;
break;
}
}
//如果flag是0 表示是素数 打印
if (flag==0){
printf("%d\n",i);
}
}
}