果然还是改变不了用数学的思维写题的模式,不过以后还是应该多体会循环和递增这种算法的思想,况且有的拿数学方法很难实现。。。。
#include<stdio.h>
#include<math.h>
int main()
{
long long s,i,sum1=0,p,sum2=0,sum3=0;
double k,t,n,m,q;
scanf("%lf",&k);
t=2*k-2.0;
n=sqrt(t);
m=int(sqrt(t));
if(n-m<0.00001)
{
for(i=1;i<=n;i++)
{
sum1+=i*i;
}
printf("%d",sum1);
}
else
{
m=int (sqrt(t));
for(i=1;i<=m;i++)
{
sum2+=i*i;
}
q=(m*m+2)/2;
sum3=(k-q)*(n+1);
printf("%d",sum2+sum3);
}
return 0;
}
虽然代码没有实现,不过收获满满
1.编写代码时如果对数据的范围有要求的话,要实现考虑用long或者longlong以及short等类型;
2.如果对一些特殊变量进行特殊运算(自增,自减,特定范围)要事先规定范围;
3;判断整数的方法:
1.本身减去整形强制类型转换完之后的(前提是二者都为double型,如果差值小于六位(即0.00001))即可以说明为整数;
2.不能用取模的方法,在使用之前已经默认该数据类型为整数。
正解:
#include<stdio.h>
int main()
int k;
int final=0,day=1,j=1;
scanf("%d",&k);
for(int i=1;i<=k;i++0)
{
final+=day;
if(j==day)
{
day++;
j=0;
}
j++;
}
printf("%d\n",final);
return 0;
}
所须注意事项:
1,代码规范性,可读性要提高;
2.对于代码的优化,要在自己思考范围内做到最好.
3.不要以长,复杂为荣。