• CSDN编程挑战——《高斯公式》


    高斯公式

    题目详情:

    高斯在上小学时发明了等差数列求和公式:1+2+..+100=5050。如今问题在于给你一个正整数n,问你他能够表示为多少种连续正整数之和?(自身也算)。

    输入格式:

    多组数据,每组数据一行,一个正整数n。

    0<n<2000000000

    输出格式:

    每组数据一行,包括一个正整数,表示结果。



    答题说明:

    输入例子

    5

    120

    输出例子:

    2

    4

    解释:

    5=2+3=5

    120=1+2+...+15=22+23+24+25+26=39+40+41=120



    初稿代码:

    /*
    	3:	3、1+2=3
    	4:      4、
    	5:	5、2+3=5
    	6:	6、1+2+3=6 
    	7:     7、3+4=7 
    	8:	8、
    	9:	9、4+5=9、2+3+4=9
    	10:    10、1+2+3+4=10 	
    	
    	分析: 
    		输入n
    		设 s,x (x个从s開始连续的数相加等于n,比如 :10=1+2+3+4中 n:10 s:1 x=4)
    		于是有求和公式:  
    			(s+(s+x-1)) 
    			----------- * x = n
    				2 
    		依据求和公式暴力就可以求解 
    */	
    #include "stdio.h"
    #include "math.h"
    int main()
    {
    	int count;
    	long long x,n;
    	while(scanf("%I64d",&n)!=EOF)
    	{
    		count=1; 
    		for(x=2;x<n;x++){
    			double s=(n+(x-x*x)/2.0)/x;
    			if(s>=1){
    				if(floor(s+0.5)==s){	//推断 s 为整数 
    					printf("%d > x:%I64d s:%d
    ",count+1,x,(int)s);
    					count++;
    				}else{
    					printf("%d,%lf不整除!
    ",x,s);
    				}				
    			}else{
    				printf("最多不超过%d个数相加!
    ",x); 
    				break;
    			}
    		}
    		printf("result:%d
    ",count);
    		break;
    	} 
    	return 0;
    } 


    AC后代码:

    #include "stdio.h"
    #include "math.h"
    int main()
    {
    	int count;
    	long long x,n;
    	while(scanf("%I64d",&n)!=EOF)
    	{
    		double s=n;
    		for(count=0,x=2;s>=1;x++){
    			if(floor(s+0.5)==s)	{
    				count++;
    			//	printf("%d >  x:%d  s:%d
    ",count,x-1,(int)s);
    			}
    			s=(double)n/x+(1-x)/2.0;						
    		}
    		printf("%d
    ",count);
    	//	break;
    	} 
    	return 0;
    }

    注意:程序中数据类型为 int 对照较大的数据计算过程中可能会溢出

    CSDN挑战编程交流群:372863405                 



  • 相关阅读:
    无锁队列的实现
    C/C++语言中闭包的探究及比较
    Linus:利用二级指针删除单向链表
    Unix考古记:一个“遗失”的shell
    “C++的数组不支持多态”?
    Alan Cox:单向链表中prev指针的妙用
    二叉树迭代器算法
    C语言全局变量那些事儿
    数据即代码:元驱动编程
    C++模板”>>”编译问题与词法消歧设计
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/5158063.html
Copyright © 2020-2023  润新知