C语言牛客网(NowCoder)刷题篇

大家好我是沐曦希💕


给大家介绍一款超牛的斩获大厂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.写在最后

那么就到这里了。
在这里插入图片描述

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沐曦希

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值