太戈编程 题解 第518 519 734

第518题

518. 排列生成

题目描述

输入n,1<=n<=8。输出n的全排列,每一行一个排列方案,数字由空格隔开,按照字典序输出。注意行末不能有空格。

代码

#include <bits/stdc++.h>
using namespace std;
int n,p[10];
void print(){
	for(int i=1;i<n;i++) cout<<p[i]<<" ";
	cout<<p[n]<<endl;
}
int main(){
	cin>>n;
	for(int i=1;i<=n;i++) p[i]=i;
	do{
		print();
	}while(next_permutation(p+1,p+1+n));
	return 0;
}

第519题

519. 起个英文名1

题目描述

王村长生了个大胖儿子需要起英文名字,关键要朗朗上口。他认为有n种音节是好听的,必须都用到一次,那么有哪些排序方式呢?

代码

#include <bits/stdc++.h>
using namespace std;
string names[1000];
int n;
void print(){
	for(int i = 1;i<=n;i++)cout<<names[i];
	cout<<" wang"<<endl;
}
int main(){
	freopen("name1.in","r",stdin);
	freopen("name1.out","w",stdout);
	cin>>n;
	for(int i = 1;i<=n;i++)cin>>names[i];
	sort(names+1,names+1+n);
	do{
		print();
	}while(next_permutation(names+1,names+1+n));
	return 0;
}

第734题

734. 格子染色1

题目描述

有一排格子需要染色,每个格子只可以是RGB这3种颜色之一,要求相邻两格不能同色。目前有些格子已经有固定颜色不能改变了,剩下的格子可以选择染色。输入一串字符s代表格子情况,o代表空格RGB代表已有固定色。输出所有可能性,每行一种染色方法,按照字典序排列。

代码

#include <bits/stdc++.h>
using namespace std;
const int N=25;
const int CLR=3;
char colors[CLR]={'B','G','R'};
int n,p[N];
void print(){//输出 
	for(int i=1;i<=n;i++) cout<<colors[p[i]];
	cout<<endl;
}
void dfs(int x){//递归枚举决策 
	if(x==n+1) {print();return ;}
	if(p[x]>=0) {dfs(x+1);return ;}
	for(int i=0;i<CLR;i++){
		if(x==1&&p[2]!=i||x==n&&p[n-1]!=i||x>1&&x<n&&p[x-1]!=i&&p[x+1]!=i){//x号格子能涂i号颜色的条件 
			p[x]=i;
			dfs(x+1);
			p[x]=-1;
		}
	}
}
int main(){
	freopen("color.in","r",stdin);
	freopen("color.out","w",stdout);
	char ch;
	while(cin>>ch){//Ctrl+Z结束 
		++n;
		if(ch=='B') p[n]=0;
		else if(ch=='G') p[n]=1;
		else if(ch=='R') p[n]=2;
		else p[n]=-1;
	}
	p[0]=p[n+1]=-1;
	dfs(1);
	return 0;
}

 Peter Peter在哪里,我要赶快关注你。粉丝粉丝在哪里,我一定会去回关你!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值