C++输入数字三角形123456789(直角三角形和等腰三角形)

问题描述:

从键盘上输入一个数字,代表这个三角形有几行

预期效果:

第一行:1

第二行:2 3

第三行:4 5 6

第四行:7 8 9。。。。

源代码:

初次写,可能比较麻烦,代码中我采用了一维数组,代码内都有相关的注释,有不足的地方欢迎大家多多指正,指点指点

#include<iostream>
using namespace std;
int Triangle(int n);//自定义三角形函数的函数声明
int main() {
	int n;
	cin >> n;
	if (n < 15) {
		Triangle(n);//另外写了一个专门执行功能的函数
	}
	return 0;
}
int Triangle(int n) {
	int sum = 0;
	int array[50];
	int k1 = 1;
	int k2 = 0;

	/*根据从键盘上输入的数字得出1+2+3+....的总和
	第一行有一个,第二行有两个,第三行有三个...*/
	for (int i = 1; i <= n; i++) {
		sum += i;
	}

	//然后将他们存入到一个一维数组,数组空间我设置了50,超出就会溢出
	for (int i = 0; i < sum; i++) {
		//当k1>sum时这个循环就退出
		if (k1 > sum)
			break;
		/*将1 2 3 ...存入到数组中
		因为要存入的数是从1开始,所以说在开头定义了k1=1,而不是=0*/
		array[i] = k1;
		k1++;
	}

	//用i来计算当前的行数,直到i=之前从键盘输入的数字为止,循环就结束
	for (int i=0; i < n; i++) {
		/*上网参考了别人的代码
		了解到要想输出等腰三角形,实质上就是先输出一个倒着的直角三角形,只不过内容为空白
		这个循环注释上就是个直角三角形*/
		for (int j = 0; j < n - i - 1; j++) {
			cout  << " ";
		}

		/*这个j用来设置当前行数中所需要显示的数字的个数
		比如说第一行输出一个,第二行输出两个,第i行就输入i个
		k2用来表示当前数组的下标,因为数组是从array[0] array[1]..开始,所以在前面设置了k2=0,而不是=1
		循环一次k2就要自增1,自增到j<=i时,就要换行,重新一行开始继续循环*/
		for (int j = 0; j<=i;j++){
			cout << array[k2] << " ";
			k2++;
		}
		//一次循环之后需要换行,不然不是一个三角形,全都输入到一行了
		cout << endl;
	}
	return 0;
}

输出效果:

等腰三角形

直角三角形

 

关于一位数字和两位数字怎么对齐的,暂时还不会敲,呜呜呜有高手指点指点嘛

C++中,判断一个三角形的类型通常需要知道三个边长a、bc。常见的三角形类型有三种基本类型:等边三角形(三边相等)、等腰三角形(两边相等)普通三角形(无特定边相等)。其中,等腰直角三角形有一个特殊条件,即两个非等边的边满足勾股定理(a² + b² = c²),其中c是对边,也是斜边。 判断步骤如下: 1. **输入三角形边长**:首先获取用户输入或者预先给定的三个边长。 2. **检查等边三角形**:如果任意一边等于另外两边之,则它是等边三角形。 3. **检查等腰三角形**:如果有两边长度相等,那么这个三角形等腰三角形。 4. **计算面积(只用于验证是否为直角三角形)**:如果两边满足勾股定理,则计算第三个边(c)作为斜边,可以用公式`sqrt(a^2 + b^2)`来检验。 5. **判断直角三角形**:如果满足勾股定理且不是等边三角形,就判断为等腰直角三角形。 ```cpp #include <iostream> #include <cmath> bool isEquilateral(double a, double b, double c) { return std::abs(a - b) < 0.0001 && std::abs(b - c) < 0.0001 && std::abs(c - a) < 0.0001; } bool isIsosceles(double a, double b, double c) { return std::abs(a - b) < 0.0001 || std::abs(b - c) < 0.0001 || std::abs(c - a) < 0.0001; } bool isRightangled(double a, double b, double c) { return std::fabs(a * a + b * b - c * c) < 0.0001; } int main() { double a, b, c; // 输入边长... if (isEquilateral(a, b, c)) { std::cout << "等边三角形" << std::endl; } else if (isIsosceles(a, b, c)) { std::cout << "等腰三角形" << std::endl; } else if (isRightangled(a, b, c) && !isIsosceles(a, b, c)) { std::cout << "等腰直角三角形" << std endl; } else { std::cout << "普通三角形" << std::endl; } return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值