问题:
给定正整数,判断它是否等于四个连续整数的总和。
输入格式:
组成
输入由单个正整数输出格式:
输出包含一个“是”或“否”的字符串。当给定数字是四个连续整数的总和时打印是,否则打印否。例:
在这个例子中,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 ;
}
答案 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.这可能有助于您显着简化程序。