HDOJ 1405 The Last Practice [恶心题]

此题有两点很让人纠结:

1、最后一个数字之后还有一个空格(题目没说清楚)

2、在最后一组也就是-1之前不输出空行(这个有说,但此类格式很少见)

 

我自己写的那段代码:Output Limit Exceeded了5次

 

随后去杭电论坛看了一下,无意中发现一段很值得学习的代码,当然,先拿来AC了再说,然后在仔细学习。

其中的for(ni=2;ni<=n&&n%ni!=0;ni++) ;一句用得很妙,直接得出素数因子,而我之前的代码则是先求出一定范围内的prime所有值,然后再求因子,显然前者要好的多。还有此段代码用了一个hash[]数组来保存各个因子的指数也用得相当巧妙。

 

代码如下:

#include #include #define MAXLEN 65536 using namespace std; int main(){ int n,ni,a[MAXLEN],hash[MAXLEN],k,ki,i,cas=0; while(scanf("%d",&n)&&n>0){ cas++; if(cas>1) putchar('/n'); printf("Case %d./n",cas); k=0; memset(a,0,sizeof(a)); memset(hash,0,sizeof(hash)); while(n!=1){ for(ni=2;ni<=n&&n%ni!=0;ni++) ; a[k++]=ni; n/=ni; } for(ki=0;ki0;i++) if(hash[i]!=0){ k-=hash[i]; printf("%d %d ",i,hash[i]); } putchar('/n'); } return 0; } 

你可能感兴趣的:(ACM,output)