九度OJ 1345:XXX定律之画X (递归)
2015-11-23 10:37
351 查看
时间限制:1 秒
内存限制:32 兆
特殊判题:否
提交:361
解决:157
题目描述:
给你一个n,然后让你输出F(n)
规则是这样的,F(n)的输出结果是:
F(n-1) F(n-1)
F(n-1)
F(n-1) F(n-1)
F(1)的输出结果是:X
那么根据规则F(2)的输出结果应该是:
X X
X
X X
输入:
题目有多组输入,每组输入一个n(n<=7)。
当输入零或负数的时候结束输入。
输出:
对每组输入输出相应的F(n),每组输出最后一行是‘#’。
样例输入:
样例输出:
思路:
设一个最大的二维字符数组,递归的打印二维数组的值。由于这个题的模板固定为X形状,因此每次更新只要更新当前边长的3倍,也就是面积的9倍的字符数组。
代码:
[cpp] view
plaincopy
#include <stdio.h>
#include <string.h>
#include <math.h>
#define N (int)(pow(3, 6))
int p
;
void set(int n, int x, int y)
{
if (n == 1)
{
p[x][y] = 1;
return;
}
int s = pow(3, n-2);
set(n-1, x, y);
set(n-1, x+s, y+s);
set(n-1, x+2*s, y);
set(n-1, x, y+2*s);
set(n-1, x+2*s, y+2*s);
}
void print(int n)
{
int size = pow(3, n-1);
for (int i=0; i<size; i++)
{
for (int j=0; j<size; j++)
{
if (p[i][j] == 0)
printf(" ");
else
printf("X");
}
printf("\n");
}
printf("#\n");
}
int main(void)
{
int n;
while (scanf("%d", &n) != EOF)
{
if (n <= 0)
break;
memset(p, 0, sizeof(p));
set(n, 0, 0);
print(n);
}
return 0;
}
/**************************************************************
Problem: 1345
User: liangrx06
Language: C
Result: Accepted
Time:80 ms
Memory:3080 kb
****************************************************************/
内存限制:32 兆
特殊判题:否
提交:361
解决:157
题目描述:
给你一个n,然后让你输出F(n)
规则是这样的,F(n)的输出结果是:
F(n-1) F(n-1)
F(n-1)
F(n-1) F(n-1)
F(1)的输出结果是:X
那么根据规则F(2)的输出结果应该是:
X X
X
X X
输入:
题目有多组输入,每组输入一个n(n<=7)。
当输入零或负数的时候结束输入。
输出:
对每组输入输出相应的F(n),每组输出最后一行是‘#’。
样例输入:
1 2 3 -1
样例输出:
X # X X X X X # X X X X X X X X X X X X X X X X X X X X X X X X X #
思路:
设一个最大的二维字符数组,递归的打印二维数组的值。由于这个题的模板固定为X形状,因此每次更新只要更新当前边长的3倍,也就是面积的9倍的字符数组。
代码:
[cpp] view
plaincopy
#include <stdio.h>
#include <string.h>
#include <math.h>
#define N (int)(pow(3, 6))
int p
;
void set(int n, int x, int y)
{
if (n == 1)
{
p[x][y] = 1;
return;
}
int s = pow(3, n-2);
set(n-1, x, y);
set(n-1, x+s, y+s);
set(n-1, x+2*s, y);
set(n-1, x, y+2*s);
set(n-1, x+2*s, y+2*s);
}
void print(int n)
{
int size = pow(3, n-1);
for (int i=0; i<size; i++)
{
for (int j=0; j<size; j++)
{
if (p[i][j] == 0)
printf(" ");
else
printf("X");
}
printf("\n");
}
printf("#\n");
}
int main(void)
{
int n;
while (scanf("%d", &n) != EOF)
{
if (n <= 0)
break;
memset(p, 0, sizeof(p));
set(n, 0, 0);
print(n);
}
return 0;
}
/**************************************************************
Problem: 1345
User: liangrx06
Language: C
Result: Accepted
Time:80 ms
Memory:3080 kb
****************************************************************/
相关文章推荐
- 10大的 Metro 风格的 Bootstrap 主题和模板
- Windows常用命令
- 编程中巧用“Alt+数字”输出特殊符号
- 按钮背景颜色
- linux设备模型之总线,设备,驱动模型
- 不能小瞧的数组——数组用法的挖掘
- WebService工作原理
- Google Guava官方教程(中文版)
- hdu5569/#63 (div.2) 1003
- 利用接口回调实现Fragment之间的跳转
- JSTL标签 参考手册(手动整理)
- Netlink技术-在Linux 下用户空间与内核空间数据交换的方式
- linux查找文件
- 机器学习之三:logistic回归(最优化)
- Andriod学习笔记1:代码优化总结1
- CSS3实现鼠标hover的过渡效果
- Bootstrap select(选择列表)
- Ajax+PHP+MySQL 登陆示例
- jQuery中append、insertBefore、after与insertAfter方法注意事项
- GOOGLE地图街景预览默认的退出按扭显示