大家好我是沐曦希💕
给大家介绍一款超牛的斩获大厂offer利器——牛客网
1.统计每个月兔子的总数
题目链接:HJ37 统计每个月兔子的总数
思路
这道题的关键在于寻找数字之间的规律,会发现这其实是一个斐波那契数列。第 n 个月的兔子数量实际上就是第 n-1 个斐波那契数。
//code1
//非递归
#include <stdio.h>
int main()
{
int n;
while (~scanf("%d", &n))
{
int num1 = 1, num2 = 1, ret = 0;
for (int i = 2; i < n; i++)
{
ret = num1 + num2;
num1 = num2;
num2 = ret;
}
printf("%d\n", ret);
}
return 0;
}
//code2
//递归
#include<stdio.h>
int Fid(int n)
{
int a = 0;
if(n==1)
return 1;
if(n==2)
return 1;
if(n>=3)
a = Fid(n-1)+Fid(n-2);
return a;
}
int main()
{
int n = 0;
scanf("%d",&n);
int ret = Fid(n);
printf("%d\n",ret);
return 0;
}
2.数列的和
题目链接:ZJ16 数列的和
思路
求取一个数字的平方根可以使用数学库中的 double sqrt(double num) 函数完成,接下来只需要从数字自身开始进行求和并在求和后将 n 自身计算成为自身的平方根即可。
代码
#include <stdio.h>
#include <math.h>
int main()
{
double m, n;
while (~scanf("%lf %lf", &n, &m))
{
double sum = 0;
while (m-- > 0)
{
sum += n;//从自身开始以及每次的平方根进行求和
n = sqrt(n);//n成为当前自身的平方根
}
printf("%.2lf\n", sum);
}
return 0;
}
3.完全数计算
题目链接:HJ56 完全数计算
思路
这道题的关键在于完全数的判断:完全数指的是一个数字的所有约数的和和自身相等。我们只需要从 1 开始将这个数的约数相加求和即可。
约数就是能够被数字整除,而这里简化的一个思路是数字能够被整除,则除数和结果就都是约数,这种思路下,只需要从1计算到平方根即可。
比如:数字 8 , 能够整除 2 ,结果是 4 ,则除数 2 和结果 4 都是约数,而这两个只需要一次计算判断即可。
需要注意的是 4,9,25… 这种,除数和结果相同的情况,则除数或者结果只相加一次就够了。
代码
#include <stdio.h>
#include <math.h>
int is_perfect_num(int num)
{
int sum = 1;
for (int i = 2; i <= sqrt(num); i++)
{
if (num % i == 0) {//判断是否能够整除i,能整除则i和结果都是约数
sum += i; //与除数相加
if (i != sqrt(num))//防止除数和结果相同的情况下重复相加
sum += num / i; //与相除结果相加
}
}
if(sum == num) return 1;
return 0;
}
int main()
{
int n;
while (~scanf("%d", &n))
{
int count = 0;
for (int i = 2; i <= n; i++) {//对n以内的数字都进行判断是否是完全数,注意1不参与判断
if (is_perfect_num(i)) count++;
}
printf("%d\n", count);
}
return 0;
}
4.写在最后
那么就到这里了。