如题,例如求6和2所有数字的和即3+4+5,求9与2所有数字的和,即3+4+5+6+7+8。
算法思路:两个数的差值再-1即为中间数字的个数,如9-2-1=6、6-2-1=3。由数学思路可得,数轴两端的数之和,等于正数第二个数与倒数第二个数之和(类似于高斯计算1+2+...+100)。故中间数的个数为偶数时候,该偶数除以2即为有几对两端数字之和(例如 9与2之间有6个数即有3对9+2相加,即和为(6/2)*(9+2))。若个数为奇数,则该奇数-1就变成偶数对数,再加上0.5*两端之和(例如6和2之间有3个数,和为(3-1)/2*(6+2)+0.5*(6+2))。
代码如下:
int main()
{
int a, b, flag,count,temp,sum;
do
{
flag = 0;
printf("please enter two different numbers:\n");
scanf("%d %d",&a,&b);
if (a==b)
{
flag = 1;
printf("error!!please enter two different numbers!\n");
}
else
{
if (a > b)
{
temp = a; a = b; b = temp;//保证b变量用于存较大的值
}
count = b - a-1;//介于两个数中间的数字的个数
if (count % 2)
{
sum = ((count / 2) * (b + a)) + (0.5*(b + a));
}
else
{
sum = count / 2 * (b + a);
}
}
} while (flag==1);//输入错误时,flag置1,重新输入
printf("the sum between the two numbers is:%d\n",sum);
return 0;
}