本周洛谷练习——B2097 、B2147

题目一:

    该题目方法很多,乍一看这题目让人头皮发麻。其实,如果我们可以转换一下,这道题目就很简单。我们可以从最后一项开始往前推,通过循环得到我们想要的答案。

方法一:使用循环解决

代码设计注意:

①函数库的调用

②注意数据发生截断。double—float—int

#include<stdio.h>
#include<math.h>

double jisuan(double x, int n)    //主体实现
{
	double y = sqrt(1 + x);
	for (int i = 2; i <= n; i++)
	{
		y = sqrt(y + i);
	}
	return y;
}

int main()
{
	double x = 0;
	int n = 0;
    scanf("%lf %d", &x, &n);

	double y = jisuan(x, n);//设计函数

	printf("%.2lf", y);

	return 0;
}

方法二:通过递归解决

利用函数递归解决主要注意“墙”的设立,即终止条件

double jisuan(double x, int n)    //只需改动函数
{
	if (n == 1)
		return sqrt(x + 1);
	else
	{
		return sqrt(n + jisuan(x, n - 1));
	}
}

题目二:

    笔者在拿到题目时,将题目理解错误,“输出最长平台的长度”误认为“输出最长平台对应的值”,导致原地绕圈。本题目设计需要利用到数组和两值交换。设计时尤其注意数组大小防止越界

代码为:

#include<stdio.h>
int Max(int arr[], int n)
{
    int len = 1;
    int max = 0;
    int temp = 0;
    if (n == 1)
        return 1;
    for (int i = 0; i < n ; i++)
    {
        if (arr[i] == arr[i + 1])
            len++;
        else
        {
            if (len > max)
            {   
                max = len;
                len = 1;    //重置长度
            }
        }
    }
    return max;
}


int main()
{
    int n;
    int arr[101]={0};   //函数中比较存在arr【i】和arr【i+1】,防止越界

    scanf("%d", &n);

    for (int i = 0; i < n; i++)
    scanf("%d", &arr[i]);
    
     int put = Max(arr, n);
     printf("%d", put);
    return 0;
}

  今天水了两道题,通过不断调试,敲代码学习,对该部分知识又一次认识。

  • 函数递归中“墙”的设立,防止递归陷入死循环。典例斐波那契数列
  • 数组越界: 并不会报错,但存在一个隐患,可能某一次就会使程序崩溃。
  • 数据截断: 在函数使用的时候,main主体和函数内类型不同时会发生数据截断,保存成同类型,会发生截断。与此,也会有数据扩展,需要将数据扩展成字符数更长的数据的时候,一般低位都保持不变,继续保留原有的数据,多出的高字节数据,需要根据当前被扩展数据进行不同的填充。

   读者有更好的建议,不同的代码对知识不同的理解,欢迎大家留言!

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

student042_c

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

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

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

打赏作者

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

抵扣说明:

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

余额充值