1004-D专题三

来源:互联网 发布:淘宝买什么东西比较好 编辑:程序博客网 时间:2024/04/28 09:53

1.题号:1004-D

2.题意:有一个数列,它的成员都是2,3,5,7的倍数,输入一个n,求出这个数列的第n个数。

3.思路:先列一个表,把这些数据全求出来,利用循环,设a,b,c,d=1,分别对他们 *2 , *3 , *5 , *7 ,取最小值入表,并将其+1,依次类推,最后输出所求值。

4.感想:思路跟前面的题有相似之处,看第一遍的时候都没看懂啥意思。。


AC代码

#include <iostream>  #include <cstdio>  using namespace std;  typedef long long LL;  LL dp[5843];  LL min(LL a, LL b, LL c, LL d)  {      LL temp1 = a < b ? a : b;      temp1 = temp1 < c ? temp1 : c;      temp1 = temp1 < d ? temp1 : d;      return temp1;  }  int main()  {            dp[1] = 1;      int a = 1, b = 1, c = 1, d = 1;      for (int i = 2; i <= 5842; ++i)      {          dp[i] = min(dp[a] * 2, dp[b] * 3, dp[c] * 5, dp[d] * 7);          if (dp[i] == dp[a] * 2) a++;          if (dp[i] == dp[b] * 3) b++;          if (dp[i] == dp[c] * 5) c++;          if (dp[i] == dp[d] * 7) d++;      }      int n;      while (cin>>n&&n)      {          if (n % 100 != 11 && n % 10 == 1)printf("The %dst humble number is %lld.\n", n, dp[n]);          else              if (n % 100 != 12 && n % 10 == 2)printf("The %dnd humble number is %lld.\n", n, dp[n]);              else                  if (n % 100 != 13 && n % 10 == 3)printf("The %drd humble number is %lld.\n", n, dp[n]);                  else                      printf("The %dth humble number is %lld.\n", n, dp[n]);      }      return 0;  } 


0 0
原创粉丝点击