zoukankan      html  css  js  c++  java
  • 暑期实践日志(一)

    2015年7月6日

     

    题解这道题目是一个数学题,其中有两个需要注意的地方。

    第一:题目要求我们求将一个数分解成连续数字的和,而且要求数字个数最少。由题目意思可以推导出一个公式,所给的数N=(a+(a+k-1))/2。其中的a表示连续数字和中最小的那个数,k表示的是连续数字的个数,整个公式的由来是等差数列求和公式推导的。

    第二:在求解时,虽然已经推导出了公式,但是在求解时,根据公式,我们采取遍历所有的k的值来求解a,如果从2到n遍历的话会超时。所以这里要注意,要从2到2*n开根号,这样可以避免超时。

    代码:

    #include<cstdio>
    #include<iostream>
    #include<cmath>
    #include<algorithm>
    using namespace std;
    int main()
    {
        int T;
        scanf("%d",&T);
        while(T--)
        {
            int n,k,flag=0;
            scanf("%d",&n);
            for(int i=2;i<=int(sqrt(n*2));i++)
            {
                int temp;
                temp=2*n+i-i*i;
                if(temp%i==0&&(temp/i)%2==0&&temp>0)
                {
                    k=i;
                    flag=1;
                    break;
                }
            }
            if(flag)
            {
                printf("%d = ",n);
                int a=(2*n+k-k*k)/(2*k);
                for(int i=0;i<k;i++)
                {
                   int ans=a+i;
                    if(i==k-1)
                        printf("%d
    ",ans);
                    else
                        printf("%d + ",ans);
                }
            }
            else
                printf("IMPOSSIBLE
    ");
        }
    return 0;
    }
  • 相关阅读:
    Codeforces Round #261 (Div. 2) D
    数据类型总结之列表字典
    while +for+字符串
    20150304+JQuery+AJax+插件-02
    20150304+JQuery+AJax+插件-01
    20150303+JQuery选择器-02
    20150303+JQuery选择器-01
    20150302+JQuery-02
    20150302+JQuery-01
    20150228--Ajax2-02
  • 原文地址:https://www.cnblogs.com/hbutACMER/p/4631647.html
Copyright © 2011-2022 走看看