本题目要求你在控制台输出一个由数字组成的等腰三角形。
具体的步骤是:
- 先用1,2,3,…的自然数拼一个足够长的串
- 用这个串填充三角形的三条边。从上方顶点开始,逆时针填充。
比如,当三角形高度是8时:
输入,一个正整数n(3<n<300),表示三角形的高度
输出,用数字填充的等腰三角形。
为了便于测评,我们要求空格一律用"."代替。
例如:
输入:
5
程序应该输出:
如:
输入:
10
程序应该输出:
如:
输入:
15
程序应该输出:
存消耗(含虚拟机) < 256M
CPU消耗 < 1000ms
请严格按要求输出,不要画蛇添足地打印类似:“请您输入…” 的多余内容。
注意:
main函数需要返回0;
只使用ANSI C/ANSI C++ 标准;
不要调用依赖于编译环境或操作系统的特殊函数。
所有依赖的函数必须明确地在源文件中 #include
不能通过工程设置而省略常用头文件。
提交程序时,注意选择所期望的语言类型和编译器类型。
注意:这个用Java写代码简单,C语言就有点长
思路:要想实现这个数字等腰三角形,最难的就是,百位和十位的数字之间的分割,这里我们可以自定义q,w,count,表示百位十位和个位,再定义一个s来控制是输入百位还是十位还是个位,
#include <stdio.h>
int main()
{
int n;
scanf("%d", &n);
int s = 0; //条件控制
//这里我们不用拆分,拆分太复杂,虽然这个也不是很方便
int q = 0, w = 0, count = 1; //q为百位,w为十位,count为个位,依靠s来控制填入
int arr[300][600]; //待填入数组
int p = n - 1, r = n; //数字位置下标
//i为行,j为列
for (int i = 0; i < n - 1; i++)
{
for (int j = 0; j < r; j++)
{
if (j == p)
{
if (s == 2) //填入百位
{
s = 1;
arr[i][j] = q + '0';//这里的0是ascll码,是用ascll码代表的数来给arr[i][j]赋值的
}
else if (s == 1) //填入十位
{
s = 0;
arr[i][j] = w + '0';
}
else //填入个位
{
arr[i][j] = count+ '0';
count++;
if (count == 10) //等于10时进位
{
count = 0;
w++;
if (w == 10)
{
w = 0;
q++;
}
}
if (w != 0) //十位不为0时开始十位个位交替填入arr如:10~13,1,0,1,1,1,2,1,3
{
s = 1;
}
if (q != 0) //百位不为0时开始百位十位个位交替填入arr
{
s = 2;
}
}
}
else//j==p就是到第二次循环的最后一次,所以这里只会保存j-1个.
{
arr[i][j] = '.';//这是在第二个循环里面的,每一次填第一行前面的.
}
}
p--;
r++;//这里r++是为了控制 数字里面的三角形点点 ,是为了让第二个for的j超过p,然后就可以把.填到数字的中间了
}
//打印底部的数字
for (int j = 0; j < r; j++) //n-1为行,j为列
{
if (s == 2)
{
s = 1;
arr[n-1][j] = q + '0';
}
else if (s == 1)
{
s = 0;
arr[n-1][j] = w + '0';
}
else
{
arr[n-1][j] = count + '0';
count++;
if (count == 10)
{
count = 0;
w++;
if (w == 10)
{
w = 0;
q++;
}
}
//当count到了10,我w等于1的时候,就是填一个个位的,填一个十位的
if (w != 0)
{
s = 1;
}
if (q != 0)
{
s = 2;
}
}
}
r--;//这里减一是为了返回倒数第二层,右边
//打印右边的数字
for (int i = n - 2; i > 0; i--) //i为行,r为列
{
r--;
if (s == 2)
{
s = 1;
arr[i][r] = q + '0';
}
else if (s == 1)
{
s = 0;
arr[i][r] = w + '0';
}
else
{
arr[i][r] = count + '0';
count++;
if (count == 10)
{
count = 0;
w++;
if (w == 10)
{
w = 0;
q++;
}
}
if (w != 0)
{
s = 1;
}
if (q != 0)
{
s = 2;
}
}
}
r = n;
for (int i = 0; i < n; i++) //打印二维数组
{
for (int j = 0; j < r; j++)
{
printf("%c", arr[i][j]);
}
printf("\n");
r++;//这里是因为等腰数字三角形每一行比第一行多一个
}
return 0;
}
代码不是本人的,是在别人哪里看了,理解了再发的,来自萌新小白,嘻嘻