版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
今天去面试的面试题:
打印:
*
***
*****
*******
*********
***********
...
函数是:void printf_A(int n)
我面试的时候写的是:
扫描二维码关注公众号,回复:
7661916 查看本文章
void printf_A(int n)
{
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n - i - 1; j++)
cout << " ";
for (int k = 1; k <= 2 * i + 1; k++)
cout << "*";
cout << endl;
}
}
这样确实没有错,但是当时想的是用二维数组写,和打印杨辉三角一样打印,后来实在不记得了,时间有限,也没多想,但是回来这样写,用了二维数组:
void printf_t(int n)
{ //new一个二维数组
char **a;
a = new char*[n]; //n个char*
int line = 2 * (n - 1) + 1; //列数
for (int i = 0; i < n; i++)
{
a[i] = new char[line]; //每个char*指向line个元素的数组头地址
}
//为二维数组赋值,使得二维数组里的值全都为' ',为需要的元素赋值为‘*’;
for (int i = 0; i < n; i++)
{
int offset = n - i - 1;//n-i-1个偏移量;
for (int k = 0; k < line; k++)
a[i][k] = ' ';
for (int j = 0; j < 2 * i + 1; j++) //第i行一共有2*i+1个‘*’;
a[i][offset + j]='*'; //从偏移量开始赋值
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < (2 * (n - 1) + 1); j++)
cout << a[i][j];
cout << endl;
}
for(int i=0;i<n;i++)
delete[] a[i];
delete[] a;
{ //new一个二维数组
char **a;
a = new char*[n]; //n个char*
int line = 2 * (n - 1) + 1; //列数
for (int i = 0; i < n; i++)
{
a[i] = new char[line]; //每个char*指向line个元素的数组头地址
}
//为二维数组赋值,使得二维数组里的值全都为' ',为需要的元素赋值为‘*’;
for (int i = 0; i < n; i++)
{
int offset = n - i - 1;//n-i-1个偏移量;
for (int k = 0; k < line; k++)
a[i][k] = ' ';
for (int j = 0; j < 2 * i + 1; j++) //第i行一共有2*i+1个‘*’;
a[i][offset + j]='*'; //从偏移量开始赋值
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < (2 * (n - 1) + 1); j++)
cout << a[i][j];
cout << endl;
}
for(int i=0;i<n;i++)
delete[] a[i];
delete[] a;
}
有什么不同呢?实际用途呢?