zoukankan      html  css  js  c++  java
  • du 熊填数字

    面对这种题,自己是一点思路也没有,只好看别的大神的代码了,看了很多,感到转载的这个思路很简单很赞

    http://blog.csdn.net/heaven13483/article/details/8284572

    Problem Description

        du熊这几天使劲的往一个n 行n列的矩阵填0和1这两个数字,n为偶数,而且矩阵由里向外分成了n / 2层。比如n = 6时,矩阵的分层如下:

        du熊填数时有一个要求:不能存在两个相邻的1,且位于不同的层(这里的相邻指两格子共用一条线)。

        请你帮du熊计算一下有多少种填法。

    Input

        输入包含多组测试数据,每组数据包含一个偶数n (2 <= n <= 500)。

    Output

        请计算并输出对2012取余后的结果。

    Sample Input

    2

    4

    Sample Output

    16

    1952

    Hint

    当n = 4时

    1011

    0100

    0100

    0000

    是满足要求的

    1111

    0100

    0100

    0000

    是不满足要求的,因为第一行第二列的1和第二行第二列的1相邻且位于不同的层。

    后来想到的解法,,对n层,,则四个角上的不用考虑,,则将剩余的部分在中间用十字平均分成四部分

    如上图中6层的数组,,划分成的左上角为,,则只需要一个一个分别看,,又分为。。,,,

    则可以分别看成3个元素的数组,,填充0和1,但1不能相邻,,

    5个元素的数组,,填充0和1,但1不能相邻,,

    同理,,n个元素的数组,,填充0和1,但1不能相邻,,各类共的有,,3*2^[(n-1)/2]-1种。。以此类推,,,即可完成,,晚了,,程序找时间补上。。

    想想还是补上吧。。省得忘记补充。。

    1. #include <iostream>  
    2. using namespace std;  
    3. int main()  
    4. {  
    5.     int n;  
    6.     cin>>n;  
    7.     int x=16;  
    8.         for (int i = n-1;i>2;i-=2)  
    9.         {  
    10.             int num = 2;  
    11.             for (int j = 1;j<(i-1)/2;j++)  
    12.             {  
    13.                 num *= 2;  
    14.             }  
    15.             x = x*(3*num -1)*(3*num -1)*(3*num -1)*(3*num -1);  
    16.         }  
    17.     cout<<x%2012;  
    18.     return 0;  
    19. }  
  • 相关阅读:
    常用的40个建站代码及使用说明
    vs2008与vs2005的冲突
    ASP调用.net的webservices的实现方法
    Web Development Tools for the Power Developer
    XML Web Service开发实例——通过Windows Forms调用Web Service
    “家贼”倒卖“征途”源代码 13万元卖给识货人
    [轉載]让UpdatePanel支持文件上传
    DB2与Sybase/Oracle/Informix的比较
    網頁打印代碼大全
    完整的网站间共享数据的WebService
  • 原文地址:https://www.cnblogs.com/lfyy/p/2817032.html
Copyright © 2011-2022 走看看