hdu- 1058 Humble Numbers
2017-07-14 22:28
260 查看
题目链接:hdu-1058
思路:可四个循环暴力,此处说下dp;让每个数都乘以2,3,5,7; 四个指针,分别指向已经乘过2,3,5,7的数的下一个,然后让这四个数分别乘以2,3,5,7取最小值,注意11,12,13的英文字母结尾都是th
思路:可四个循环暴力,此处说下dp;让每个数都乘以2,3,5,7; 四个指针,分别指向已经乘过2,3,5,7的数的下一个,然后让这四个数分别乘以2,3,5,7取最小值,注意11,12,13的英文字母结尾都是th
#include <iostream> #include <string> using namespace std; int num[5845]; int min(int a,int b,int c,int d) //求四者中最小值 { a=a>b?b:a; c=c>d?d:c; return a>c?c:a; } int main() { int n; int i1=1,i2=1,i3=1,i4=1;//四个数,分别记录2,3,5,7,的个数 num[1]=1; for(int i=2;i<=5842;i++) { num[i]=min(num[i1]*2,num[i2]*3,num[i3]*5,num[i4]*7);//让每个数分别乘2,3,5,7,取四者中最小值 if(num[i]==num[i1]*2)i1++; if(num[i]==num[i2]*3)i2++; if(num[i]==num[i3]*5)i3++; if(num[i]==num[i4]*7)i4++; } while(cin>>n&&n) { if(n % 10 == 1 && n % 100 != 11) printf("The %dst humble number is %lld.\n",n ,num ); else if(n % 10 == 2 && n % 100 != 12) printf("The %dnd humble number is %lld.\n",n ,num ); else if(n % 10 == 3 && n % 100 != 13) printf("The %drd humble number is %lld.\n",n ,num ); else printf("The %dth humble number is %lld.\n",n ,num ); } return 0; }
相关文章推荐
- HDU-1058-Humble Numbers-暴力贪心
- hdu 1058 dp.Humble Numbers
- HDU 1058 Humble Numbers(动态规划)
- HDU 1058 Humble Numbers(DP,数)
- HDU 1058 Humble Numbers
- Hdu 1058 Humble Numbers
- hdu 1058 Humble Numbers
- HDU 1058:Humble Numbers
- HDU 1058 Humble Numbers
- HDU 1058 Humble Numbers
- HDU 1058 Humble Numbers(丑数,优先队列,STL)
- Problem D:Humble Numbers(HDU 1058)
- hdu 1058 Humble Numbers (DP)
- hdu 1058 Humble Numbers【dp】
- [ACM] hdu 1058 Humble Numbers
- HDU 1058 Humble Numbers(离线打表)
- HDU 1058 Humble Numbers(递推)
- hdu 1058 Humble Numbers (DP初步)
- DP Problem D:Humble Numbers(HDU 1058)
- HDU 1058(Humble Numbers)动态规划