CSP-S 例题 1-2 特殊字符

N×N 的网格中,填写一些特殊字符,分别是 !@#$%……&*(,他们之间的大小关系是 !<@<#<$<%<^<&<*<(
要求用这些字符填满 N×N 的网格,每个网格的字母上下左右各不相同,同时要求网格元素尽可能的小。(有些网格可能已经预填字符)(大小比较,先行后列)
例如:2×2的网格中,
 

image.png


输入 N 组数据,输入 N,输入 N×N 网格。

输入描述

输入 T,代表T组数据。输入 N,输入 N×N 网格。

输出描述

输出 N 组 N×N 矩阵。

样例输入 1 

2
3
...
...
...
3
...
!..
...

样例输出 1 

!@!
@!@
!@!
@!@
!@!
@!@
#include<bits/stdc++.h>
using namespace std; 
char str[10]="!@#$%^&*(";
char g[10][10];
int n,t;
int main(){
	cin>>t;
	while(t--){
		//输入数组初始状态 
		cin>>n;
		for(int i=0;i<n;i++){
			for(int j=0;j<n;j++){
				cin>>g[i][j];
			}
		}
		//遍历填充'.'的位置 
		for(int i=0;i<n;i++ ){
			for(int j=0;j<n;j++){
				if(g[i][j]=='.'){
					for(int k=0;k<9;k++){ //枚举 ! @ ... 
						bool ok=true;
						if(i>0&&g[i-1][j]==str[k]) ok=false;
						if(i<n-1&&g[i+1][j]==str[k]) ok=false;
						if(j>0&&g[i][j-1]==str[k]) ok=false;
						if(j<n-1&&g[i][j-1]==str[k]) ok=false;
						if(ok){
							g[i][j]=str[k];
							break;
						} 
					}
				}
			}
		}
		//输出结果
		for(int i=0;i<n;i++){
			for(int j=0;j<n;j++){
				cout<<g[i][j];
			}
			cout<<endl;
		} 
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值