原题描述:
我们都知道:1+2+3+ … + 49 = 1225
现在要求你把其中两个不相邻的加号变成乘号,使得结果为2015
比如:
1+2+3+…+1011+12+…+2728+29+…+49 = 2015
就是符合要求的答案。
下面就是我的代码:
#include<stdio.h>
#include<math.h>
int sum(int a,int b)
{
int s=0,i;
for(i=a;i<=b;i++)
{
s+=i;
}
return s;
}
void jiafabian(int x,int y)
{
int a[10000],i,j=0,s=0,k,b,c,count=0;
for(i=1;1;i++)
{
a[j++]=i;
s+=i;
if(s==x)break;
else if(s>x)
{
goto flag;
}
}
s=0;
for(i=0;i<j-1;i++)
{
b=a[i]*a[i+1];
for(k=i+3;k<j-1;k++)
{
c=a[k]*a[k+1];
if(i==0)
{
s=b+sum(a[i+2],a[k-1])+c+sum(a[k+2],a[j-1]);
}
else
{
s=sum(1,a[i-1])+b+sum(a[i+2],a[k-1])+c+sum(a[k+2],a[j-1]);
}
if(s==y)
{
printf("(%d,%d)",a[i],a[k]);
count++;
}
}
}
if(count==0)
{
flag:printf("NONE\n");
}
else
{
printf("\n");
}
}
main()
{
int i,j,n,x[10],y[10];
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d %d",&x[i],&y[i]);
}
for(i=0;i<n;i++)
{
jiafabian(x[i],y[i]);
}
}
这个算法还是比较好理解的把,但是比较经典,里面用到的方法都是许多经典的小算法累积起来的。所以正如我在之前的博客中讲到的,多积累,多学习,多思考,多练习,总会好的。