• 棋盘覆盖(大数阶乘,大数相除 + java)


     

    棋盘覆盖

    时间限制: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
    accept:
    #include<stdio.h>
    #include<string.h>
    #define MAXN 10010
    int m[MAXN],pow[MAXN];
    void bigpower(int n){int a,b;
    memset(m,0,sizeof(m));
    m[0]=1;
        for(int i=0;i<n;++i){a=b=0;
            for(int j=0;j<MAXN;++j){
                a=m[j]*2+b;
                m[j]=a%10;
                b=a/10;
            }
        }
        int j=MAXN,i;
            while(!m[--j]);
            for(i=0,j;j>=0;j--,i++)pow[i]=m[j];
            for(j=i-1;j>=0;j--){
                if(m[j]){
                m[j]--;
                }
                else m[j]+=9;    
            } 
            int sum=0,x=0,t=0;
            for(int k=0;k<i;++k){
                sum=sum*10+pow[k];
                if(sum>=3)printf("%d",sum/3),t=1;
                else if(t)printf("0");
                sum%=3;
            }
            puts("");
    }
    int main(){
        int m,k;
        scanf("%d",&m);
        while(m--){
            scanf("%d",&k);
            bigpower(k+k);
        }
        return 0;
    }

     java:

    package 随笔;
    
    import java.math.BigInteger;
    import java.util.Scanner;
    
    public class 棋盘覆盖 {
        public static void main(String[] s){
            Scanner cin = new Scanner(System.in);
            int T = cin.nextInt();
            while(T-- > 0){
                BigInteger ans = new BigInteger("1");
                int k = cin.nextInt();
                while(k-- > 0){
                    ans = ans.multiply(BigInteger.valueOf(4));
                }
                ans = ans.add(BigInteger.valueOf(-1));
                ans = ans.divide(BigInteger.valueOf(3));
                System.out.println(ans);
            }
            
        }
        
    }
  • 相关阅读:
    VScode出现无法打开“X”: 找不到文件(file:///XXXX) 的解决办法
    Re:0通过服务器自建内网穿透远程桌面(10分钟可完成)
    (补题 POJ 3013) Big Christmas Tree
    (补题 cf 1140)Detective Book
    (2019.9.5~2019.9.11)补题汇总(字符串相关)
    最小生成树(克鲁斯卡尔算法)
    最短路问题
    字符串匹配(部分整理)
    Linux内核分析——第八周学习笔记
    《Linux内核设计与实现》第四章读书笔记
  • 原文地址:https://www.cnblogs.com/handsomecui/p/4674928.html
Copyright © 2020-2023  润新知