zoukankan      html  css  js  c++  java
  • P1147 连续自然数和(思维题)

    题目描述

    对一个给定的自然数MM,求出所有的连续的自然数段,这些连续的自然数段中的全部数之和为MM。

    例子:1998+1999+2000+2001+2002 = 100001998+1999+2000+2001+2002=10000,所以从19981998到20022002的一个自然数段为M=10000M=10000的一个解。

    输入输出格式

    输入格式:

    包含一个整数的单独一行给出M的值(10 le M le 2,000,00010≤M≤2,000,000)。

    输出格式:

    每行两个自然数,给出一个满足条件的连续自然数段中的第一个数和最后一个数,两数之间用一个空格隔开,所有输出行的第一个按从小到大的升序排列,对于给定的输入数据,保证至少有一个解。

    输入输出样例

    输入样例#1: 复制

    10000
    

    输出样例#1: 复制

    18 142 
    297 328 
    388 412 
    1998 2002

    题解:利用求根公式看是否能求出整数即可

    #include<cstdio>
    #include<algorithm>
    #include<iostream>
    #include<cstring>
    #include<cmath>
    
    
    using namespace std;
    
    int main()
    {
        long long int a;
    	double b;
    	int m;
    	cin>>m;
    	for(long long int t=1;t<m;t++)
    	{
    		 
    		 b=(-2*t+1+sqrt((2*t+1)*(2*t+1)-4*(2*t-2*m)))/2;
    	     a=(-2*t+1+sqrt((2*t+1)*(2*t+1)-4*(2*t-2*m)))/2;
             if(a==b)
    		 {
    		   printf("%d %d
    ",t,t+a-1);	
    		 }	
     	}
    	
    	
    	return 0;
    }
  • 相关阅读:
    关于terminal
    如何从word、excel、ppt中提取flash文件?
    backbone event inherit
    backbonejscomplexmodel
    ssh
    on off trigger
    从数组中删除指定值
    jstl 标签报错 Unterminated &lt;%@ page tag 错误 .
    selenium + python自动化测试环境搭建
    自勉一则
  • 原文地址:https://www.cnblogs.com/Staceyacm/p/10782081.html
Copyright © 2011-2022 走看看