编程比赛
http://bbs.youkuaiyun.com/topics/390448276
我的答案 因为要求cpu时间 所以必须优化
我是按照gcc优化的 windows编译器不知能不能过编译
代码挂上gpl 大家随便用
http://bbs.youkuaiyun.com/topics/390448276
我的答案 因为要求cpu时间 所以必须优化
我是按照gcc优化的 windows编译器不知能不能过编译
代码挂上gpl 大家随便用
#include<stdio.h>
#include<time.h>
inline int bitnum(int x);
inline int check(int x,int y,int z);
inline void seperate(int x);
int a[10]={0};
int main(void)
{
clock_t start,end;
start=clock();
register int i,j,k;
int num;
register int x,y,z,yy;
register int index;
register int sum=0,fuck=0;
puts("please,input a integer.");
scanf("%d",&num);
for(i=1;i<num;i++)
{
x=i;
y=yy=num-i;
z=1;
sum=bitnum(x)+bitnum(y)+bitnum(z);
while(sum<=9)
{
for(index=0;index<10;index++)
a[index]=0;
if(check(x,yy,z))
fuck++;
z++;
yy=y*z;
sum=bitnum(x)+bitnum(y)+bitnum(z);
}
}
printf("there are %d \n",fuck);
end=clock();
printf("it takes %g seconds",(double)(end-start)/CLOCKS_PER_SEC);
return 0;
}
int bitnum(int x)
{
register int i=0;
while(1)
{
x=x/10;
if(x!=0)
i++;
else
{
i++;
break;
}
}
return i;
}
void seperate(int x)
{
register int i=bitnum(x);
register int j=0,k=0;
while(j++<i)
{
k=x%10;
a[k]=k;
x=x/10;
}
}
int check(int x,int y,int z)
{
register int i=0,j=0;
int t[3]={x,y,z};
while(j<3)
i+=bitnum(t[j++]);
if(i==9)
{
j=0;
while(j<3)
seperate(t[j++]);
for(i=1;i<10;i++)
if(a[i]==0) return 0;
return 1;
}
else return 0;
}