给定正整数,判断它是否等于四个连续整数的总和

时间:2015-08-29 16:38:14

标签: c math

问题:

  

给定正整数,判断它是否等于四个连续整数的总和。

     

输入格式:
  输入由单个正整数

组成      

输出格式:
  输出包含一个“是”或“否”的字符串。当给定数字是四个连续整数的总和时打印是,否则打印否。

     

例:
  在这个例子中,2 = -1 + 0 + 1 + 2,而82 = 19 + 20 + 21 + 22. 5和41不正确   形式。

     

示例输入1:
  2

     

样品输出1:
  是

     

示例输入2:
  41

     

样品输出2:
  无

我的程序没有被接受,而且对于某些值我的结果正在重复,有人可以帮助我吗?

#include <stdio.h>

int main()
{
    int num,sum1=0,index,sum2=0,Soln=0;
    int temp,i;
    scanf("%d",&num);
    if(num <= 0 )
    {
        printf("Wrong Input\n");
        return 0;
    }
    for(index=1;;index++)
    {
        sum1=sum1+index;
        if(sum1>=num)
            break;
    }
    if(sum1 == num )
    {
        if(num == index)
        {
            printf("yes");
            return 0;
        }
        Soln++;
        printf("no" );
        for(temp=1;temp<=index;temp++)
            printf("no");
    }
    for(i=1;i<index;i++)
    {
        sum2+=i;
        if((sum1-sum2) == num )
        {
            if((i+1) == index)
            {
//printf("yes");
                break;
            }
            Soln++;
            printf("no" );
            for(temp= i+1;temp<=index;temp++)
                printf("no");
            break;
        }
    }
    if( Soln == 0 && num >= 9 && num/2 == (num-1)/2 ) //--> if U don't want more       than one ,soln use this 
    //if( num >= 9 && num/2 == (num-1)/2 ) //--> if U want more than one soln, use this
    {
        Soln++;
        printf("no");
    }
    if(Soln==0)
    {
        printf("yes");
    }
    return 0 ;
}

1 个答案:

答案 0 :(得分:4)

取四个连续的整数k,k + 1,k + 2和k + 3并求它们。这产生4k + 6.如果整数n是四个连续整数的总和,则意味着对于某个整数k,n = 4k + 6。同样地,这意味着对于某个整数k,n = 6 = 4k,或者相当于(n - 6)mod 4 = 0.这可能有助于您显着简化程序。