瓷砖

烂代码和好代码

雨燕双飞 提交于 2020-04-07 05:30:41
好的代码应该是简单直接、逻辑清晰的,bug 难以隐藏的。即时没有注释读一遍也能看懂。 而烂代码逻辑混乱,写完过段时间自己都看不懂。 这里从一些问题出发对比好代码烂代码,希望大家共同提高。 1 红黑砖迷阵问题 问题描述[1] 有一个矩形的房间里铺满正方形瓷砖。每块瓷砖涂成黑色或红色。一个人站在黑色的瓷砖上,从此出发,可以移动到四个相邻的瓷砖之一,但只能移动到黑色的瓷砖上。计算他通过重复上述移动所能经过的黑砖数。 这里把红色改成了白色,其他不变。思路原作者描述的很详细了。 /* 样例输入输出 6 9 //列数、行数 BBBBWB BBBBBW BBBBBB BBBBBB BBBBBB BBBBBB BBBBBB W@BBBW BWBBWB 45 0 0 //结束标志 */ 这里对比一下我的实现(烂代码)和原作者的实现(好代码) #include<iostream> #include<cstdio> #include<string> #include<vector> using namespace std; int g=0; vector<vector<bool> > isvisit; /*1. 由于每次输入的是字符串,考虑用vector<string>表示该二维矩阵,cin>>str输入每行。 用char a[][];cin>>a[i] 更方便*/ void reach(vector

【编程题m_0001】彩色瓷砖

空扰寡人 提交于 2020-04-07 04:57:27
链接: https://www.nowcoder.com/questionTerminal/31af498841fd491886b8dee6ebde9768 来源:牛客网 牛牛喜欢彩色的东西,尤其是彩色的瓷砖。牛牛的房间内铺有L块正方形瓷砖。每块砖的颜色有四种可能:红、绿、蓝、黄。给定一个字符串S, 如果S的第i个字符是'R', 'G', 'B'或'Y',那么第i块瓷砖的颜色就分别是红、绿、蓝或者黄。 牛牛决定换掉一些瓷砖的颜色,使得相邻两块瓷砖的颜色均不相同。请帮牛牛计算他最少需要换掉的瓷砖数量。 输入描述: 输入包括一行,一个字符串S,字符串长度length(1 ≤ length ≤ 10),字符串中每个字符串都是'R', 'G', 'B'或者'Y'。 输出描述: 输出一个整数,表示牛牛最少需要换掉的瓷砖数量 示例1 输入 RRRRRR 输出 3 解题思路:由于有四种颜色的瓷砖,所以对于i-1,i,i+1,替换掉i的颜色肯定可以保证相邻不相同 package BiShiTi; import java.util.Scanner; public class m_0001 { public static void main(String[] args) { Scanner scan = new Scanner(System.in); String str = scan

蓝桥杯 算法训练 瓷砖铺放Python实现(递归)

為{幸葍}努か 提交于 2020-02-26 17:38:49
资源限制 时间限制:1.0s 内存限制:512.0MB 问题描述   有一长度为N(1<=N<=10)的地板,给定两种不同瓷砖:一种长度为1,另一种长度为2,数目不限。要将这个长度为N的地板铺满,一共有多少种不同的铺法?   例如,长度为4的地面一共有如下5种铺法:   4=1+1+1+1   4=2+1+1   4=1+2+1   4=1+1+2   4=2+2   编程用递归的方法求解上述问题。 输入格式   只有一个数N,代表地板的长度 输出格式   输出一个数,代表所有不同的瓷砖铺放方法的总数 样例输入 4 样例输出 5 分析: 解决问题的关键是找到递归的公式,我们可以把2的数目看成递归的突破点,4里面最多的2的数目就是2个。 种类的通式如下:(假如是4) 值得注意的是,C(n,k)的计算方法: AC代码: while True : try : n = int ( input ( ) ) if n == 1 : print ( 1 ) break def mul ( a ) : #阶乘函数 ans = 1 for i in range ( 1 , a + 1 ) : ans *= i return ans def Rec ( n , k ) : if n == k : return 2 #一开始和最后都是1 else : return mul ( n ) // ( mul

codevs2806 红与黑

左心房为你撑大大i 提交于 2020-02-22 21:07:09
难度等级:白银 codevs2806 红与黑 题目描述 Description 有一个矩形房间,覆盖正方形瓷砖。每块瓷砖涂成了红色或黑色。一名男子站在黑色的瓷砖上,由此出发,可以移到四个相邻瓷砖之一,但他不能移动到红砖上,只能移动到黑砖上。编写一个程序,计算他通过重复上述移动所能经过的黑砖数。 输入描述 Input Description 输入包含多个数据集。一个数据集开头行包含两个正整数W和H,W和H分别表示矩形房间的列数和行数,且都不超过20. 每个数据集有H行,其中每行包含W个字符。每个字符的含义如下所示: '.'——黑砖 '#'——红砖 '@'——男子(每个数据集仅出现一次) 两个0表示输入结束。 输出描述 Output Description 对每个数据集,程序应该输出一行,包含男子从初始瓷砖出发可到达的瓷砖数。 样例输入 Sample Input 6 9 ....#. .....# ...... ...... ...... ...... ...... #@...# .#..#. 11 9 .#......... .#.#######. .#.#.....#. .#.#.###.#. .#.#..@#.#. .#.#####.#. .#.......#. .#########. ........... 11 6 ..#..#..#.. ..#..#..#.. ..#..#

红与黑

孤者浪人 提交于 2020-02-22 21:05:09
codevs——2806 红与黑 时间限制: 1 s 空间限制: 64000 KB 题目等级 : 白银 Silver 题解 题目描述 Description 有一个矩形房间,覆盖正方形瓷砖。每块瓷砖涂成了红色或黑色。一名男子站在黑色的瓷砖上,由此出发,可以移到四个相邻瓷砖之一,但他不能移动到红砖上,只能移动到黑砖上。编写一个程序,计算他通过重复上述移动所能经过的黑砖数。 输入描述 Input Description 输入包含多个数据集。一个数据集开头行包含两个正整数W和H,W和H分别表示矩形房间的列数和行数,且都不超过20. 每个数据集有H行,其中每行包含W个字符。每个字符的含义如下所示: '.'——黑砖 '#'——红砖 '@'——男子(每个数据集仅出现一次) 两个0表示输入结束。 输出描述 Output Description 对每个数据集,程序应该输出一行,包含男子从初始瓷砖出发可到达的瓷砖数。 样例输入 Sample Input 6 9 ....#. .....# ...... ...... ...... ...... ...... #@...# .#..#. 11 9 .#......... .#.#######. .#.#.....#. .#.#.###.#. .#.#..@#.#. .#.#####.#. .#.......#. .#########. ........

红与黑 DFS(JAVA解法)

ε祈祈猫儿з 提交于 2020-01-28 14:46:45
有一间长方形的房子,地上铺了红色、黑色两种颜色的正方形瓷砖。 你站在其中一块黑色的瓷砖上,只能向相邻(上下左右四个方向)的黑色瓷砖移动。 请写一个程序,计算你总共能够到达多少块黑色的瓷砖。 输入格式 输入包括多个数据集合。 每个数据集合的第一行是两个整数 WW 和 HH,分别表示 xx 方向和 yy 方向瓷砖的数量。 在接下来的 HH 行中,每行包括 WW 个字符。每个字符表示一块瓷砖的颜色,规则如下 1)‘.’:黑色的瓷砖; 2)‘#’:白色的瓷砖; 3)‘@’:黑色的瓷砖,并且你站在这块瓷砖上。该字符在每个数据集合中唯一出现一次。 当在一行中读入的是两个零时,表示输入结束。 输出格式 对每个数据集合,分别输出一行,显示你从初始位置出发能到达的瓷砖数(记数时包括初始位置的瓷砖)。 数据范围 1≤W,H≤201≤W,H≤20 输入样例: 6 9 ....#. .....# ...... ...... ...... ...... ...... #@...# .#..#. 0 0 输出样例: 45 import java.util.*; public class Main{ static char [][]g = new char[30][30]; static int []dx = {-1,0,1,0}; static int []dy = {0,1,0,-1}; static

红与黑 题解

大城市里の小女人 提交于 2020-01-22 15:38:22
红与黑 有一间长方形的房子,地上铺了红色、黑色两种颜色的正方形瓷砖。你站在其中一块黑色的瓷砖上,只能向相邻的黑色瓷砖移动。请写一个程序,计算你总共能够到达多少块黑色的瓷砖。 Input包括多个数据集合。每个数据集合的第一行是两个整数W和H,分别表示x方向和y方向瓷砖的数量。W和H都不超过20。在接下来的H行中,每行包括W个字符。每个字符表示一块瓷砖的颜色,规则如下 1)‘.’:黑色的瓷砖; 2)‘#’:白色的瓷砖; 3)‘@’:黑色的瓷砖,并且你站在这块瓷砖上。该字符在每个数据集合中唯一出现一次。 当在一行中读入的是两个零时,表示输入结束。 Output对每个数据集合,分别输出一行,显示你从初始位置出发能到达的瓷砖数(记数时包括初始位置的瓷砖)。 Sample Input 6 9 ....#. .....# ...... ...... ...... ...... ...... #@...# .#..#. 0 0 Sample Output 45 PS: #include<stdio.h> #include<iostream> #include<queue> #include<cstring> #define N 25 using namespace std; char mp[N][N]; int r,c,vis[N][N],cnt; int fx[4]={1,0,-1,0};

装修

时光总嘲笑我的痴心妄想 提交于 2020-01-11 02:21:50
房屋装修装饰记录 装修组成部分 从毛坯开始,装修包括墙面处理、地面处理、顶部处理、改水、改电、改采暖、改煤气。 地面处理主要是卫生间做防水处理,揭掉已有防水层,重新铺防水层,刷防水胶(漆),可以要求将防水漆刷到距地面不低于1.5米的高度,以增加淋浴区防水的性能。铺瓷砖主要注意地砖的铺设方向和缝线对齐,如是否和过道对齐,和门口进门对齐还是远端对齐等,在取得毛坯房尺寸时可以做图测算。 墙面处理,如果不是水泥墙面,装修公司会要求铲墙,把原有乳胶漆和腻子层铲掉,重新挂网、刮腻子、最后刷乳胶漆,或刷壁纸。 顶部处理主要是是否做顶部造型,吊顶。如不做灯池等造型吊顶,可以做石膏线装饰增添立体区域效果。厨房和卫生间通常都需要做吊顶,现在以集成吊顶为主,以每块300mmx300mm尺寸铝扣板组成整个吊顶,吊顶前要提前安装好油烟机在排烟口处的止逆阀,卫生间通风设备在排风口处的止逆阀如果可以也尽量先安装好,因为吊顶安装完毕后的空间很小不方便作业。 改水主要是改卫生间水路和厨房水路,也就是要规划这两个地方上水和排水管位置,水龙头位置。马桶位置因排水固定无法移动,其上水也在旁边一般不需要改造。洗脸池位置一般安装在自来水上水附近,保证水压的正常。地漏通常有2-3个,淋浴地漏、洗衣机地漏,淋浴地漏通常因为上面就是淋浴器,因此也就决定了水路上水的方向,要安排淋浴器到热水器的位置,尽量高度持平避免压力不够淋浴水压小

1216:红与黑

与世无争的帅哥 提交于 2019-12-04 05:17:54
题目描述】 有一间长方形的房子,地上铺了红色、黑色两种颜色的正方形瓷砖。你站在其中一块黑色的瓷砖上,只能向相邻的黑色瓷砖移动。请写一个程序,计算你总共能够到达多少块黑色的瓷砖。 【输入】 包括多个数据集合。每个数据集合的第一行是两个整数W和H,分别表示x方向和y方向瓷砖的数量。W和H都不超过20。在接下来的H行中,每行包括W个字符。每个字符表示一块瓷砖的颜色,规则如下: 1)‘.’:黑色的瓷砖; 2)‘#’:白色的瓷砖; 3)‘@’:黑色的瓷砖,并且你站在这块瓷砖上。该字符在每个数据集合中唯一出现一次。 当在一行中读入的是两个零时,表示输入结束。 【输出】 对每个数据集合,分别输出一行,显示你从初始位置出发能到达的瓷砖数(记数时包括初始位置的瓷砖)。 【输入样例】 6 9 ....#. .....# ...... ...... ...... ...... ...... #@...# .#..#. 0 0 【输出样例】 45 这题和上一题深林的题很像,但是这题还是有点不一样的因为要多个vis来判断已经走过,和一个mapp来表明哪里 不能走 哪里能走 #include<bits/stdc++.h> using namespace std; const int N=30; int n,m; int u[4][2]={{0,1},{0,-1},{1,0},{-1,0}}; int vis

【openjudge】红与黑

Deadly 提交于 2019-12-04 05:17:45
1818:红与黑 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB 描述 有一间长方形的房子,地上铺了红色、黑色两种颜色的正方形瓷砖。你站在其中一块黑色的瓷砖上,只能向相邻的黑色瓷砖移动。请写一个程序,计算你总共能够到达多少块黑色的瓷砖。 输入 包括多个数据集合。每个数据集合的第一行是两个整数W和H,分别表示x方向和y方向瓷砖的数量。W和H都不超过20。在接下来的H行中,每行包括W个字符。每个字符表示一块瓷砖的颜色,规则如下 1)‘.’:黑色的瓷砖; 2)‘#’:白色的瓷砖; 3)‘@’:黑色的瓷砖,并且你站在这块瓷砖上。该字符在每个数据集合中唯一出现一次。 当在一行中读入的是两个零时,表示输入结束。 输出 对每个数据集合,分别输出一行,显示你从初始位置出发能到达的瓷砖数(记数时包括初始位置的瓷砖)。 样例输入 6 9 ....#. .....# ...... ...... ...... ...... ...... #@...# .#..#. 0 0 样例输出 45 来源 1979 状态: Accepted #include<iostream> #include<cstdio> #include<cstring> using namespace std ; int f[ 45 ][ 45 ],n,m,i,j; int num; int head