JAVA大数_棋盘覆盖
第一道:
传送门:NYOJ 45 棋盘覆盖
2^k*2^k=4^k,其实就是大数计算,-1后取3的倍数。问题本源出自《计算机算法设计与分析》的棋盘覆盖问题,原始解法是分治法,递推出公式f(k) = f(k - 1) * 4 + 1,f(1)=1,再化解下就是4^0 + 4^1 + 4^2 + ... + 4^(n-1)。有兴趣可以google原问题,附上一个不错的问题链接:棋盘覆盖
思路用大数加模拟就很简单了
Java版:
import java.math.BigInteger;
import java.util.Scanner;class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);int T = in.nextInt();while(T-- >0) { BigInteger a = new BigInteger("1");int n = in.nextInt();for(int i = 1; i<=n; i++) {a = a.multiply(BigInteger.valueOf(4));}BigInteger ans = a.subtract(BigInteger.valueOf(1)).divide(BigInteger.valueOf(3));System.out.println(ans);}}
}
C/C++:
#include <stdio.h>
#include <string.h>int a[50];
int b[100];void f()
{//大数*2 int i;for(i = 0; i < 50; i++){a[i] *= 2; }for(i = 0; i < 50 ; i++){a[i + 1] += a[i] / 10;a[i] %= 10;}
}void g()
{//大数减一,再除以三 、b[0] - 1; int i;int k = 0, f = 0;for(i = 99; i >= 0; i --){if(b[i] != 0)break;}/*for(int j = 0; j < 100; j++)printf("%d", b[j]);printf("\n");*/for(; i >= 0 ; i--){k = k * 10 + b[i];if(k / 3 || f){printf("%d", k / 3);k %= 3;f = 1;}}if(f == 0)printf("0");printf("\n");
}void f1()
{//大数的平方 int i, j;for(i = 0; i < 50; i++){for(j = 0; j < 50; j++){b[i + j] += a[i] * a[j];}}for(i = 0; i < 100; i++){b[i + 1] += b[i] / 10;b[i] %= 10;}
}int main (void)
{int m;scanf("%d", &m);while(m --){memset(a, 0, sizeof(a));memset(b, 0, sizeof(b));a[0] = 1;int n, i;scanf("%d", &n);for(i = 0; i < n; i++)f();/*for(i = 0; i < 50; i++)printf("%d", a[i]);printf("\n");*/f1();g();}return 0;
}
网上其他人提出的万进制版本?
/** Author: illuz <iilluzen[at]gmail.com>* Blog: http://blog.csdn.net/hcbbt* File: 45.cpp* Lauguage: C/C++* Create Date: 2013-08-31 19:39:38* Descripton: nyoj 45, cheesboard coverage, wan jin zhi */
#include <cstdio>const int MAXN = 100;
int a[MAXN]; // 万进制,每位存4进制int main() {int n, m, c;scanf("%d", &n);while (n--) {scanf("%d", &m);if (m == 1) {printf("1\n");continue;}a[0] = 1;int t = 0; // 已经用到第几位for (int i = 1; i < m; i++) {c = 0; // c为进位数for (int j = 0; j <= t; j++) {a[j] = a[j] * 4 + c;c = a[j] / 10000;a[j] %= 10000;}if (c != 0) {t++;a[t] = c;}a[0]++;}// 处理最后的进位,其实就是99999999这种情况,这里可以不用
// for (int j = 0; j <= t; j++) {
// c = a[j] / 10000;
// a[j] %= 10000;
// }
// if (c != 0) {
// t++;
// a[t] = c;
// }printf("%d", a[t]);for (int i = t - 1; i >= 0; i--)printf("%04d", a[i]);printf("\n");}return 0;
}
转载于:https://www.cnblogs.com/zhangmingzhao/p/7256694.html
JAVA大数_棋盘覆盖相关推荐
- java棋盘覆盖_棋盘覆盖问题实现
[实例简介] 实现棋盘覆盖问题 [实例截图] [核心代码] public static void chessBoard(int dr, int dc, int tr, int tc, int size ...
- python棋盘覆盖问题_棋盘覆盖问题可视化动图——python
棋盘覆盖问题可视化动图--python 棋盘覆盖问题是一个经典的分治法解决的问题,具体内容可以参照以下博主的解析 为了更好的理解该算法分治的过程 利用了python中的matplotlib库进行了该算 ...
- ckeditor java 使用_如何覆盖默认插件并使用它们拥有按钮ckeditor
我知道这个问题被问到几个地方,但没有人符合我的要求 . 我想使用默认的ckeditors插件到我自己的按钮和图标 . 可以说,我有一些按钮和图标,现在我想让他们控制ckeditor像普通的ckedit ...
- java实现棋盘覆盖算法,java 棋盘覆盖算法
import java.util.Scanner; /** 棋盘覆盖 */ public class Arithmetic { /** 被覆盖后显示的数字,会根据覆盖的顺序有所递增 */ privat ...
- python棋盘覆盖_java实现的棋盘覆盖
课课家和大家分享一些Java实现的棋盘覆盖的思路:应用分治法 分治的技巧在于如何划分棋盘,使划分后的子棋盘的大小相同,并且每个子棋盘均包含一个特殊方格,从而将原问题分解为规模较小的棋盘覆盖问题.k&g ...
- 棋盘覆盖 (详细图解)
一.棋盘覆盖 二.解题步骤 1.在给定的8x8的方格中如何实现题目中要求的效果,因需用L型的骨牌覆盖,因其仅占三个格子无法与8x8形成联系,因此我们可以利用分治算法将其划分为小单元,与L型产生联系进行 ...
- java棋盘问题_0x03大数问题(JAVA解决棋盘覆盖,A+B Problem II)
常见的有棋盘覆盖和A+B问题,这类问题牵扯到的数值都比较大,如果用一般的数值类型,肯定输出不了,所以就要想一个办法,怎么把大数转换一下输出. A+B Problem II 时间限制:3000 ms | ...
- 棋盘覆盖(java实现)
6.2 棋盘覆盖 1.问题描述 在一个2k×2k 个方格组成的棋盘中,恰有一个方格与其它方格不同,称该方格为一特殊方格,且称该棋盘为一特殊棋盘.在棋盘覆盖问题中,要用图示的4种不同形态的L型骨牌覆盖给 ...
- 棋盘覆盖算法java_棋盘覆盖问题(算法分析)(Java版)
1.问题描述: 在一个2k×2k个方格组成的棋盘中,若有一个方格与其他方格不同,则称该方格为一特殊方格,且称该棋盘为一个特殊棋盘.显然特殊方格在棋盘上出现的位置有种情形.因而对任何 k≥0,有4k种不 ...
最新文章
- 调优 DB2 UDB v8.1 及其数据库的最佳实践-IBM developerWorks
- python代码壁纸-70行python代码实现壁纸批量下载
- JAVA 子父类的特点
- Redis学习第三课:Redis Hash类型及操作
- C#使用Xamarin开发可移植移动应用进阶篇(8.打包生成安卓APK并精简大小),附源码
- srtvlet filter
- 管理者和领导者的区别_如何赢得领导者的尊重
- java list移除符合条件的元素_从List中移除指定 List 中包含的其所有元素(可选操作)。...
- Mac给Sublime Text 配置Python3开发环境
- Python+tkinter根据窗体大小自动缩放并显示图像
- UITableViewCell的高亮和选中以及自绘分割线
- curl: (7) Failed connect to localhost:9200; Connection refused
- Spring IoC — 基于Java类的配置
- 树莓派4B之雨滴雨水传感器模块(python3)
- 浙江高考计算机专业要选什么课,浙江省新高考7选3选课指南发布 七选三技巧解读...
- 什么是TTL?标准USB接口是TTL吗?RS232、RS422、RS485的区别?
- Python 实现数据分析中的 帕累托、漏斗、RFM、雷达图
- android删除sd卡照片恢复,手机内存清理方法及照片误删恢复方法 手机党必备
- 行测-图形推理-7-相异图形类
- 【BZOJ3831】[Poi2014]Little Bird 单调队列