这题主要是用递归的思想做:
题目:http://acm.pku.edu.cn/JudgeOnline/problem?id=2082
递归的题目得多练练,感觉还是不行~
【代码】如下:
#include <iostream>
#include <cmath>
using namespace std;
bool Echange(int i,int j,int n)
{
if(n==1) return true;
if((i<n/3&&j<n/3)||(i<n/3&&j>=2*n/3)||(i>=2*n/3&&j<n/3)
||(i>=2*n/3&&j>=2*n/3)||(i>=n/3&&i<2*n/3&&j>=n/3&&j<2*n/3))
{
n=n/3;
return Echange(i%n,j%n,n);
}
return 0;
}
int main()
{
int n;
int i,j;
while(cin>>n)
{
if(n==-1) break;
n=(int)pow((double)(3),(double)(n-1));
for(i=0;i<n;i++){
for(j=0;j<n;j++)
{
if(Echange(i,j,n)) cout<<'X';
else cout<<' ';
}
cout<<endl;
}
puts("-");
}
return 0;
}