【在数列中求最大平方数】

已知数列1,1,2,2,3,3,4,4,5,5…在这个数列前 n 个数中任意选择几个数出来,使他们的和为完全平方数,并且使这个和尽可能的大,让你帮助算一下这个数最大为多少。

输入:n

输出:最大平方数

小伙伴们,别被那一串数列和“任意选择”吓到啦

思路:因只要求输入n,输出最大平方数,所以我们只需找出输入数据与输出数据的关系即可->>即简化为"找规律"的类型

注:后面可能存在很大的平方数,因此要用long long

法一:(初次发现的规律)

#include<stdio.h>
int main()
{
    long long int n,m,a;
    scanf("%lld",&n);
    m=n/2;
    if(n==1)
        a=1;
    else  //分了奇偶来判断
    {
        if(n%2==0)
            a=m*m;
        else if(n%2!=0)
        {
            m=m+1;
            a=m*m;
        }
    }
    printf("%lld",a);
    return 0;
}

法二:(更简单)

#include<stdio.h>
int main()
{
    long long n,m,a;
    scanf("%lld",&n);
    if(n==1)
        a=1;
    else
    {
        m=(n+1)/2;
        a=m*m;
    }              //找输入与输出的直接关系
    printf("%lld",a);
    return 0;
}
  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值