HDOJ2007_平方和与立方和
应该注意到一个细节是题目中没有说明输入的两个数据一定是先小后大的关系,所以需要做一次判断。其他的比较简单。
#include<iostream>
#include<string>
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
using namespace std;
int j_sum[100005]={0};
int o_sum[100005]={0};
int main()
{
int a,b;
int i,j;
//对所有的奇数,用数组j_sum保存好当前奇数往前所有奇数的立方和
j_sum[1]=1;
for(i=3;i<10005;i+=2)
{
j_sum[i]=j_sum[i-2]+i*i*i;
}
//对所有的偶数,用数组o_sum保存好当前偶数往前所有偶数的平方和
o_sum[0]=0;
for(i=2;i<10005;i+=2)
{
o_sum[i]=o_sum[i-2]+i*i;
}
while(scanf("%d %d",&a,&b)!=EOF)
{
//这里要注意题目中没有说明输入的两个数的大小关系,所以需要做一次判断
if(a>b)
{
int tmp=a;
a=b;
b=tmp;
}
int sum1=0,sum2=0;
int j1,j2,o1,o2;//保存该区间最左端奇数最右端奇数和最左端偶数最右端偶数
if(a%2==0)
{
o1=a-2;
j1=a-1;
}
else
{
j1=a-2;
o1=a-1;
}
if(b%2==0)
{
o2=b;
j2=b-1;
}
else
{
j2=b;
o2=b-1;
}
printf("%d %d\n",o_sum[o2]-o_sum[o1],j_sum[j2]-j_sum[j1]);
}
return 0;
}
思路
这里我发现目前还没有遇到TLE的题目,即基本都还是十分基础十分简单的暴力即可求解的题目。所以上面代码中复杂的先求出所有数之和再做减法貌似有点多余。