17年冬季第一题 PAT甲级 1140 Look-and-say Sequence (20分)

忘是亡心i 2023-07-04 04:38 31阅读 0赞

原题

Look-and-say sequence is a sequence of integers as the following:

  1. D, D1, D111, D113, D11231, D112213111, ...

where D is in [0, 9] except 1. The (n+1)st number is a kind of description of the nth number. For example, the 2nd number means that there is one D in the 1st number, and hence it is D1; the 2nd number consists of one D (corresponding to D1) and one 1 (corresponding to 11), therefore the 3rd number is D111; or since the 4th number is D113, it consists of one D, two 1’s, and one 3, so the next number must be D11231. This definition works for D = 1 as well. Now you are supposed to calculate the Nth number in a look-and-say sequence of a given digit D.

Input Specification:

Each input file contains one test case, which gives D (in [0, 9]) and a positive integer N (≤ 40), separated by a space.

Output Specification:

Print in a line the Nth number in a look-and-say sequence of D.

Sample Input:

  1. 1 8

Sample Output:

  1. 1123123111

易错点

生成的序列并不是统计全局的计数,而是look and say,就地处理。

代码

  1. #include<iostream>
  2. #include<vector>
  3. #include<set>
  4. #include<map>
  5. #include<algorithm>
  6. #include<cmath>
  7. using namespace std;
  8. int main(){
  9. int d,n;
  10. cin>>d>>n;
  11. string s=to_string(d);
  12. for(int i=0;i<n-1;i++){
  13. int len=s.size(),same=1;
  14. string t="";
  15. for(int j=0;j<len;j++){
  16. if(j+1<len){
  17. if(s[j]==s[j+1]){
  18. same++;
  19. }else {
  20. t+=s[j];
  21. t+=to_string(same);
  22. same=1;
  23. }
  24. }else {
  25. t+=s[j];
  26. t+=to_string(same);
  27. }
  28. }
  29. s=t;
  30. }
  31. cout<<s<<endl;
  32. return 0;
  33. }

发表评论

表情:
评论列表 (有 0 条评论,31人围观)

还没有评论,来说两句吧...

相关阅读