• NYOJ45 棋盘覆盖


     

    棋盘覆盖

    时间限制:3000 ms  |  内存限制:65535 KB
    难度:3
     
    描述

    在一个2k×2k(1<=k<=100)的棋盘中恰有一方格被覆盖,如图1(k=2时),现用一缺角的2×2方格(图2为其中缺右下角的一个),去覆盖2k×2k未被覆盖过的方格,求需要类似图2方格总的个数s。如k=1时,s=1;k=2时,s=5

                                                                                        

     

    图1

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

                                                 图2                     

     

     

     

     
     
    输入
    第一行m表示有m组测试数据;
    每一组测试数据的第一行有一个整数数k;
    输出
    输出所需个数s;
    样例输入
    3
    1
    2
    3
    样例输出
    1
    5
    21

     1 /* 功能Function Description:     NYOJ-45
     2    开发环境Environment:          DEV C++ 4.9.9.1
     3    技术特点Technique:
     4    版本Version:
     5    作者Author:                   可笑痴狂
     6    日期Date:                      20120821
     7    备注Notes:
     8    本题求的是大数(4^k-1)/3,可以转化为首项为1,公比为4的等比数列的前k项的和
     9    把除法转化为加法和乘法。
    10 */
    11 #include<stdio.h>
    12 #include<string.h>
    13 
    14 void mult(int *tmp,int num,int &bit)
    15 {
    16     int t=0;
    17     for(int i=0;i<bit;++i)
    18     {
    19         t=tmp[i]*num+t;
    20         tmp[i]=t%10;
    21         t/=10;
    22     }
    23     if(t)
    24     {
    25         tmp[bit]=t;
    26         ++bit;
    27     }
    28 }
    29 
    30 void add(int *sum,int *tmp,int &bit)
    31 {
    32     int i,t=0;
    33     for(i=0;i<bit;++i)
    34     {
    35         sum[i]+=tmp[i];
    36         sum[i+1]+=sum[i]/10;
    37         sum[i]%=10;
    38     }
    39     if(sum[i])
    40         ++bit;
    41 }
    42 
    43 int main()
    44 {
    45     int k,T,i,bit;
    46     int tmp[100]; //存放每一项的值
    47     int sum[100]; //存放结果
    48     scanf("%d",&T);
    49     while(T--)
    50     {
    51         memset(tmp,0,sizeof(tmp));
    52         memset(sum,0,sizeof(sum));
    53         scanf("%d",&k);
    54         tmp[0]=1;
    55         sum[0]=1;
    56         bit=1;
    57         for(i=1;i<k;++i)
    58         {
    59             mult(tmp,4,bit);
    60             add(sum,tmp,bit);
    61         }
    62         for(i=bit-1;i>=0;--i)
    63             printf("%d",sum[i]);
    64         printf("\n");
    65     }
    66     return 0;
    67 }
    功不成,身已退
  • 相关阅读:
    解决Shockwave flash在chrome浏览器上崩溃的问题
    Java实现平衡二叉树(AVLTree)的构建
    Netty4具体解释二:开发第一个Netty应用程序
    cocos2dx实现android的对讯飞语音的合成(语言朗读的实现)
    how tomcat works 读书笔记四 tomcat的默认连接器
    我的职业观
    学习NodeJS第一天:node.js引言
    数学之路-python计算实战(20)-机器视觉-拉普拉斯算子卷积滤波
    .net web 开发平台- 表单设计器 一(web版)
    白话经典算法系列之中的一个 冒泡排序的三种实现
  • 原文地址:https://www.cnblogs.com/dongsheng/p/2648797.html
Copyright © 2020-2023  润新知