算法训练 之 2019-CCPC网络赛-1007 Windows Of CCPC
输入和输出用例:
解题思路:
用递归。
n=1时,
左下角那个P和其余3个C。
n=2时,
用n=1时的图形拼成n=2的图形,但是:左下角和n=1的图形相反(C变为P,P变为C),其余则相同。
代码:
#include<stdio.h>
#include<math.h>
void f(int n, int s, int t){
if(n==2){
if(t==1) {
if(s==1)
printf("CC");
else printf("PC");
}
else {
if(s==1)
printf("PP");
else printf("CP");
}
return ;
}
int x=s%(n/2);
if(x==0) x=n/2;
if(t==1) {
if(s>n*1.0/2) f(n/2, x, 0);
else f(n/2, x, 1);
f(n/2, x, 1);
}
else if(t==0){
if(s>n*1.0/2) f(n/2, x, 1);
else f(n/2, x, 0);
f(n/2, x, 0);
}
}
int main(){
int t, n;
scanf("%d", &t);
while(t--){
scanf("%d", &n);
n=pow(2, n);
for(int i=1; i<=n; i++) {
f(n, i, 1);
printf("\n");
}
}
return 0;
}