题目大概如下:
先给出数组的个数n,在输入对应的边长数字,每行只输入一个,最终输出不重复的三角形个数。
eg:
输入:
3
3
4
5
输出:
1
当时笔试给我出了这一个题,说实话,写错了。于是我第二天重新写完了这道题,在此奉上。
#include<stdio.h>
/***************************************************
定义函数 san_num进行统计能组成多少三角形。
*************************************************/
int san_num(int n)
{
int jishu=0;
int ko=0;
int ji=0;
int pi=0;
int j=0;
int i=0;
int k=0;
int kl=0;
int zhongjian=0;
int san_n [100];
/************************************************************
进行从键盘读取数据,写入到数组san_n中
***********************************************************/
while(n)
{
scanf("%d",&san_n[n-1]);
n--;
j++;
}
/*************************************************************
进行冒泡排序,将其进行从小到大进行排列,在三角形中,只要最小的两个边
加起来大于最大的边,便可以认为其是三角形,所以先进行排序
**************************************************************/
for(i=0;i<j-1;i++)
{
for(k=0;k<j-i-1;k++)
{
if(san_n[k]>san_n[k+1])
{
zhongjian=san_n[k];
san_n[k]=san_n[k+1];
san_n[k+1]=zhongjian;
}
}
}
/****************************************************************
进行判断,先取第三个数作为最大的数,将前两个的数值进行相加
在取第4个数作为最大值,保持最小值不变,将第二小值向左移动,进行判断。
以此列推
**********************************************************/
for(ji=2;ji<j;ji++)
{
for(pi=0;pi<ji-1;pi++)
{
for(ko=ji-1;ko>pi;ko--)
{
if(san_n[ko]+san_n[pi]>san_n[ji])
{
jishu++;
}
else
continue;
}
}
}
return (jishu);
}
/*******************************************************************
在主函数中输出罪行的数量
******************************************************************/
main()
{
int number_zong =0;
scanf("%d",&number_zong);
printf("%d",san_num(number_zong));
}
验证的图片
最后谢谢大家,如有不对的地方,还请指出,谢谢大家。