用于总结当时的经典题型。
题目:
记得大一刷题有这样一道题:
默认三角形(n=2)是形如下列形状的:
n = 3时是这样的
输入一个整数n(1<=n<=9),输出符合题意的图形。
解析:
当时老纠结了,最后才明白需要用递归。。
总结代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h> // Windows下需要,Linux下不需要
#include<math.h>
#define F(i,n) for(int i=0;i<n;i++)
#define MAXN pow(2,10)
int Map[1024][1024];
void Solve(int x,int y,int num)
{
if(num == 0)
Map[x][y] = 1;
else
{
int temp = pow(2,num-1);
Solve(x,y+temp,num-1);
Solve(x+temp,y+temp*2,num-1);
Solve(x+temp,y,num-1);
}
}
int main()
{
int t = 3;
srand((unsigned int)time(NULL));
F(i,t)
{
memset(Map,0,sizeof(Map));
int n = rand()%9 + 1;
printf("%d\n",n);
Solve(0,0,n);
F(j,pow(2,n))
{
F(k,pow(2,n+1))
putchar(Map[j][k]==1 ? '*' : ' ');
puts("");
}
}
return 0;
}
题目的代码我就不写了,这个是总结的代码,总结代码是随机生成t个整数n,然后根据n输出相关图形。
一个一个说,说的可能有点详(luo)细(suo):
1.头文件:
我在机房玩Ubuntu,结果ubuntu没网....就换成Windows又写了遍,发现Windows需要自己写time.h头文件,而ubuntu不需要....后面需要用time()函数。
math.h是为了使用pow()函数,不需要自己写循环,节省时间。
string.h是为了使用memset()函数,初始化数据。
stdlib.h使用随机数函数srand(),rand()。
2.随机数:
随机数的产生原理是某一时刻(T1)到目前时间(T2)的时间差(最后以秒为单位),然后对n取余,生成0-n的随机数。srand()函数提前给rand()生成一个种子,可以理解为自己定义T1,如果定义为0或NULL,默认为1970年一月一日0点。
3.putchar(),puts()函数:
putchar用于输出单个字符;puts输出时自动换行。快,便捷。
其他的可以自己理解,这道题主要是思路。不懂或哪里有问题可以评论,谢谢~