题意:
给定一个正常的数独,要求修改最多9个元素,使得其成为反数独。即要求每行,列,小方块里均有至少两个相同的元素。
解析:
大致模拟样例,发现选取的9个元素分别位于不同行,列,小方块。可以想到确定第一个为(1,1),那么其余的都可以确定,构造一个满足条件的9个位子,并且修改其元素为原先数值加1即可。
代码:
#include<bits/stdc++.h>
using namespace std;
char a[10][10];
int dx[9]={1,2,3,4,5,6,7,8,9};
int dy[9]={1,4,7,2,5,8,3,6,9};
int t;
int main()
{
cin >> t;
while(t--)
{
for(int i = 0;i < 9;i++) cin >> a[i];
for(int i = 0;i < 9;i++){
if(a[dx[i]-1][dy[i]-1]=='9') a[dx[i]-1][dy[i]-1]='1';
else a[dx[i]-1][dy[i]-1]+=1;
}
for(int i=0;i<9;i++){
cout<<a[i]<<endl;
}
}
return 0;
}
收获:
字符串到数字的变化要注意。可以直接+=1。