杭电1058
来源:互联网 发布:领航软件 编辑:程序博客网 时间:2024/06/06 19:41
看到本题的题目就应该知道,这个题的时间应该是线程的,下面说说思路。
本题所要求的就是素数2 ,3, 5, 7这四个数的倍数,而且还不能数别的素数的倍数,如11,13 等,那么我们就可以想到将10以后的素数和他们的倍数排除掉,但是这样做太耗时,空间存储要求很大,所以这种想法是不可能AC的。下面换一种思路,既然他求得是2,3,5,7这几个数和他们的倍数(还有1),那么去我们就可以将他们的倍数全都表达出来,你可以这么想,既然他们都是2,3,5,7这几个数的倍数,那么自然这所有的数内部之间必然也是倍数的关系,比如24 ,6而且他们的商也一定是这些数里面的,说这个主要是想表达在表示倍数时,用这些数乘以2,3,5,7就可以了。下面结合代码讲讲“:
#include<stdio.h>#include<string.h>int min(int a,int b,int c,int d){ int x=a<b?a:b; x=x<c?x:c; x=x<d?x:d; return x;}int f[5845];int main(){ int i,a,b,c,d; int n; a=b=c=d=1; memset(f,0,sizeof(f)); f[1]=1; for(i=2;i<=5843;i++) { f[i]=min(f[a]*2,f[b]*3,f[c]*5,f[d]*7);(1) if(f[i]==f[a]*2)(2) a++; if(f[i]==f[b]*3)(2) b++; if(f[i]==f[c]*5)(2) c++; if(f[i]==f[d]*7)(2) d++; } while((scanf("%d",&n)!=EOF)&&n) { if((n%100==11)||(n%100==12)||(n%100==13)) printf("The %dth humble number is %d.\n",n,f[n]); else if(n%10==1) printf("The %dst humble number is %d.\n",n,f[n]); else if(n%10==2) printf("The %dnd humble number is %d.\n",n,f[n]); else if(n%10==3) printf("The %drd humble number is %d.\n",n,f[n]); else printf("The %dth humble number is %d.\n",n,f[n]); } return 0;}上面数字标(1)的地方就是我说的方法,就是找到这些数的倍数,提前就判断大小,注意标(2)的地方这里不是if,,,,else,,,比如f(a)=3,f(b)=2,这样两个相等,如果你只让一个增加,比如a,那么这样的话下一次就是f(b)*3最小啦,也就是这个数会被记录两次。最后就是注意一下输出,这就要考察英语啦,如果他只给出两个例子,你能不能AC呢??所以就算是看在英语的面上这题也要做。
- 杭电1058
- 杭电1058
- 杭电1058
- 杭电1058
- 杭电1058
- 杭电OJ 1058
- 杭电1058 Humble Numbers
- 杭电
- 杭电
- 杭电
- 杭电1058 数学题 Humble Numbers
- HDOJ 1058 Humble Numbers 杭电 ACM
- 杭电 HDU 1058 Humble Numbers
- java 杭电1058Humble Numbers
- 【杭电1058】Humble Numbers-动态规划
- 杭电acm—1058 Humble Numbers
- 杭电 1234 和 杭电 2115
- 杭电2056之Rectangles 杭电
- Tomcat配置双向的ssl方式(浏览器不出不信任的红叉叉情况)
- Activity 的生命周期
- 黑马程序员--JAVA基础案例之银行业务调度系统
- RMAN 中的Differential与Cumulative两种方式间的区别是什么?
- 《转》使用httpclient实现http接口调用实例
- 杭电1058
- .htaccess重写规则解析
- linux进程管理之信号处理(1)
- 将中文转换成unicode
- QQ不加群提取群成员软件V7.9
- zoj 2277 The Gate to Freedom
- 常用位操作,写8位 12864串口模式 I2C 1302 18B20
- python-swiftclient api 实例
- Android 学习笔记——利用JNI技术在Android中调用、调试C++代码