• HDU 1041 Computer Transformation


    这道题目的意思是:一开始有一个数字 1 ,在接下来的时间中,计算机会按照如下规则进行扩展:

                   0 –> 1 0

                   1 –> 0 1

    求n秒之后,有多少对相邻的0。 例如1 0 0 1有 1 对相邻的0.

    这道题目是一道规律题,可以直接例举前面的数据得到规律:

    0 0 1 1 3 5 11 21 43 85

    通过例举的数据可以很明显的看出,从第 1s 开始,如果是偶数秒,那么b[ i ] = b[ i – 1 ] * 2 – 1,而奇数秒则是b[ i ] = b[ i – 1 ] * 2 + 1。于是可以预处理打表得出0 ~ 1000的结果。

    需要注意的是,这道题需要用到高精度,因为最大的值约为 2 ^ 1000,这个数非常大。

    附AC代码:

       1: #include <iostream>
       2: #include <string>
       3: #include <algorithm>
       4: using namespace std;
       5:  
       6: int s[1005][505];
       7: int num, temp = 0;
       8:  
       9: int main()
      10: {
      11:     s[0][1] = 0;
      12:     s[1][1] = 0;
      13:     s[2][1] = 1;
      14:     s[3][1] = 1;
      15:     for(int i = 4; i <= 1000; ++i)
      16:     {
      17:         for(int j = 1; j <= 500; ++j)
      18:         {
      19:             s[i][j] = s[i - 1][j] + 2 * s[i - 2][j] + temp;
      20:             temp = s[i][j] / 10;
      21:             s[i][j] %= 10;
      22:         }
      23:     }
      24:     while(~scanf("%d", &num))
      25:     {
      26:         if(num == 1) 
      27:             puts("0");
      28:         else
      29:         {
      30:             int i;
      31:             for(i = 500; i > 0; --i)
      32:                 if(s[num][i] != 0)
      33:                     break;
      34:             for(int j = i; j >= 1; --j)
      35:                    printf("%d", s[num][j]);
      36:             puts("");
      37:         }
      38:     }
      39:     return 0;
      40: }
  • 相关阅读:
    android大作业------任务领取
    读书笔记《编程珠矶》2
    学习进度第8周
    学习进度第7周
    世界疫情可视化展示-----echarts
    读书笔记《编程珠矶》1
    团队项目新闻app的需求分析
    学习进度第6周
    团队合作项目
    SpringMVC01
  • 原文地址:https://www.cnblogs.com/wuhenqs/p/3200833.html
Copyright © 2020-2023  润新知