首页 > 其他分享 >P1259 黑白棋子的移动(函数预处理)

P1259 黑白棋子的移动(函数预处理)

时间:2023-12-25 19:23:12浏览次数:40  
标签:函数 int void P1259 棋子 include 预处理

P1259 黑白棋子的移动

个人感想

终于不用看题解的思路写题了(大概率是题比较简单)

函数预处理

如果要实现两个函数间的互相调用,直接使用会报错,因为在你第一个函数中调用的第二个函数其实还没被定义。所以需要进行函数的预处理,将次函数(排序较后的函数)可以预处理定义即可解决。

解题思路

这题非常简单,仔细观察样例就能发现它在黑白棋皆剩3颗棋子前步骤完全可以简化成两个步骤的重复,最后3颗的移动完全可以照抄(直接打表最简单)

实现

用 l,m分别代表黑白棋相接的部分和空格部分,用两个函数互相调用模拟那两个步骤(注意l和m的每次循环后更新值就好了)再判断到黑白棋剩3颗打表解决。

#include <iostream>
#include <string>
#include <math.h>
#include <algorithm>
#include <iomanip>
using namespace std;
char a[203];
int n;
void sort1();
void sort2(int n, int m);
void sort3();

void sort1(int l, int m) {
	for (int i = 1; i <= 2 * n + 2; i++) {
		cout << a[i];
	}
	cout << endl;

	char b, c;
	b = a[l];
	c = a[l + 1];
	a[l] = a[m];
	a[l + 1] = a[m + 1];
	a[m] = b;
	a[m + 1] = c;
	sort2(l, m - 2);
}

void sort2(int l, int m) {
	for (int i = 1; i <= 2 * n + 2; i++) {
		cout << a[i];
	}
	cout << endl;
	if (l - 1 == 3) {

		sort3();
		return ;
	} else {

		char b, c;
		b = a[l];
		c = a[l + 1];
		a[l] = a[m];
		a[l + 1] = a[m + 1];
		a[m] = b;
		a[m + 1] = c;
		sort1(l - 1, m );
	}
}

void sort3() {


	cout << "ooo*o**--";
	for (int i = 10; i <= 2 * n + 2; i++) {
		cout << a[i];
	}
	cout << endl;
	cout << "o--*o**oo";
	for (int i = 10; i <= 2 * n + 2; i++) {
		cout << a[i];
	}
	cout << endl;
	cout << "o*o*o*--o";
	for (int i = 10; i <= 2 * n + 2; i++) {
		cout << a[i];
	}
	cout << endl;
	cout << "--o*o*o*o";
	for (int i = 10; i <= 2 * n + 2; i++) {
		cout << a[i];
	}

}

int main() {

	cin >> n;
	for (int i = 1; i <= n; i++) {
		a[i] = 'o';
	}
	for (int i = n + 1; i <= 2 * n; i++) {
		a[i] = '*';
	}
	a[2 * n + 1] = '-';
	a[2 * n + 2] = '-';
	sort1(n, 2 * n + 1);
	return 0;
}

标签:函数,int,void,P1259,棋子,include,预处理
From: https://www.cnblogs.com/sdlypsck/p/17926809.html

相关文章

  • 【scikit-learn基础】--『预处理』之 缺失值处理
    数据的预处理是数据分析,或者机器学习训练前的重要步骤。通过数据预处理,可以提高数据质量,处理数据的缺失值、异常值和重复值等问题,增加数据的准确性和可靠性整合不同数据,数据的来源和结构可能多种多样,分析和训练前要整合成一个数据集提高数据性能,对数据的值进行变换,规约等(比如......
  • 【scikit-learn基础】--『预处理』之 分类编码
    数据的预处理是数据分析,或者机器学习训练前的重要步骤。通过数据预处理,可以提高数据质量,处理数据的缺失值、异常值和重复值等问题,增加数据的准确性和可靠性整合不同数据,数据的来源和结构可能多种多样,分析和训练前要整合成一个数据集提高数据性能,对数据的值进行变换,规约等(比如......
  • 阿里-可视化建模-数据准备与预处理
    通常情况下,在构建一个模型时,您需要准备好用于模型构建和调试所需要使用的数据,并完成数据的预处理,以便后续根据业务需求进行模型开发所需的进一步加工。本示例以PAI为您提供的公开数据为例,演示数据准备与预处理的操作步骤。前提条件已经新建了一个工作流,详情请参见新建自定义工......
  • (三十五)C#编程基础复习——C#预处理器指令
    预处理指定的作用主要是向编译器发出指令,以便在程序编译开始之前对信息进行一些预处理操作。在C#中,预处理器指令均以#开头,并且预处理器指令之前只能出现空格不能出现任何代码。另外,预处理器指令不是语句,因此它们不需要分好;结尾。在C#中,预处理指令用于帮助条件编译。不同于C和C++......
  • C0392 B 【1109 B组】预处理器 题解
    题意:求有多少个长度为\(n\)的数组\(a\)满足以下条件。条件一:\(l_{i}\lea_{i}\ler_{i}\)。条件二:\(a_{i}\)模\(2\)等于\(p_{i}\)。条件三:\(s\le\suma_{i}\let\)。求答案模\(mod\)的值,\(mod\)不一定是一个质数。数据范围:\(n\le13\)。又积累到一......
  • 题解 LGP7294【[USACO21JAN] Minimum Cost Paths P】/ accoders::NOI 5696【棋子】
    problemFarmerJohn的牧草地可以看作是一个\(N×M\)(\(2≤N≤10^9,2≤M≤2⋅10^5\))的正方形方格组成的二维方阵(想象一个巨大的棋盘)。对于\(x∈[1,N],y∈[1,M]\),从上往下第\(x\)行、从左往右第\(y\)列的方格记为\((x,y)\)。此外,对于每一个\(y∈[1,M]\),第\(y\)列拥有一个......
  • 【scikit-learn基础】--『预处理』之 正则化
    数据的预处理是数据分析,或者机器学习训练前的重要步骤。通过数据预处理,可以提高数据质量,处理数据的缺失值、异常值和重复值等问题,增加数据的准确性和可靠性整合不同数据,数据的来源和结构可能多种多样,分析和训练前要整合成一个数据集提高数据性能,对数据的值进行变换,规约等(比如......
  • 【scikit-learn基础】--『预处理』之 数据缩放
    数据的预处理是数据分析,或者机器学习训练前的重要步骤。通过数据预处理,可以提高数据质量,处理数据的缺失值、异常值和重复值等问题,增加数据的准确性和可靠性整合不同数据,数据的来源和结构可能多种多样,分析和训练前要整合成一个数据集提高数据性能,对数据的值进行变换,规约等(比如......
  • _DEBUG预处理器定义问题
    release状态编译了一个dll,但运行报assert错误,看了下系统库的源码,是在"#ifdefined_DEBUG"条件编译下的代码报出来的,疑惑release为什么还有_DEBUG状态,搜了代码、查看了预处理器定义都是没有的。后询问了大佬,原来如此:  查看微软官方说明,确实:Thecompilerdefines _DEBUG......
  • C1021 无效的预处理器命令“warning”(CGAL)
    1、错误:fatalerrorC1021:无效的预处理器命令“warning” 2、错误定位:\cgal\include\CGAL\internal\enable_third_party_libraries.h3、错误原因:未包含“gmp.h”文件的include路径4、解决方式:添加“gmp.h”文件的include路径 ......