首页 > 试题广场 >

在100-999这900个自然数中,若将组成这个数的三个数字

[单选题]
在100-999这900个自然数中,若将组成这个数的三个数字认为是三条线段的长度,那么是三条线段组成一个等腰三角形(包括等边)的共有()个?
  • 45
  • 91
  • 121
  • 142
  • 156
  • 165
推荐
先考虑等边三角形情况
则a=b=c=1,2,3,4,5,6,7,8,9,此时n有9个
再考虑等腰三角形情况,若a,b是腰,则a=b
当a=b=1时,c<a+b=2,则c=1,与等边三角形情况重复;
当a=b=2时,c<4,则c=1,3(c=2的情况等边三角形已经讨论了),此时n有2个;
当a=b=3时,c<6,则c=1,2,4,5,此时n有4个;
当a=b=4时,c<8,则c=1,2,3,5,6,7,有6个;
当a=b=5时,c<10,有c=1,2,3,4,6,7,8,9,有8个;
由加法原理知n有2+4+6+8+8+8+8+8=52个
同理,若a,c是腰时,c也有52个,b,c是腰时也有52个
所以n共有9+3×52=165个 
编辑于 2016-11-06 10:45:04 回复(11)
ffl头像 ffl
居然100多个?这个跟数字位置没关系啊。。。。

只能在111 - 999 之间选择:
等边:只有9个
等腰,不论你数字在哪个位置,只要该组合里面包含的数字是没有变化的,那么就只能算一个等腰三角形。也就是出现:
1,1的时候:没有可选
2,2的时候,只有1-3 | 2 = 2
3,3的时候,只有1-5 | 3 = 4
4,4的时候,只有1-7 | 4 = 6
大于5,5的时候,都是1-9 | 5 = 8
且5,6,7,8,9一共5个。
最后,
S = 9 + (2+4+6 + 8*5)= 61
也即61个不重复的三角形。
发表于 2016-11-13 13:03:04 回复(0)
正确答案是156个。
发表于 2018-08-19 19:50:14 回复(1)
题目问的就有歧义,如果只是询问三角形的个数,实际上只有61个,而不需要排列组合,答案超100那明显就是问的能够组合成等腰三角形的数的个数
发表于 2017-09-18 11:28:58 回复(0)
public class Triangle {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int a,b,c,n;
		int time = 0;
		for(n = 100; n <= 999; n++){
			a = n / 100;
			b = (n - a*100) / 10;
			c = (n - a*100 - b*10);
		        // System.out.println("a = " + a);
			// System.out.println("b = " + b);
			// System.out.println("c = " + c);
			
			if(a == 0 || b==0 || c ==0){
				continue;
			}

			if(a == b && a + b > c || a==c && a+c > b || b ==c && b+c > a){
				time++;
			}
		}
		System.out.println(time);
	}

}
编辑于 2016-09-09 14:10:33 回复(0)
首先,等边三角形有9个。
考虑非等边的等腰三角形。若双边为1,则第三边不存在。
若双边为2,则第三边只能是1或3。同理,可知1-9的等腰三角形的个数为(0+2+4+6+8*5)=52
三位数任选两个作为等腰三角形的两边,有3种取法,总计52*3+9=165
发表于 2016-05-06 02:18:31 回复(0)
//在100-999这900个自然数中,若将组成这个数的三个数字认为是三条线段的长度,那么是三条线段组成一个等腰三角形(包括等边)的共有()个.

#include <iostream>
using namespace std;

int main()
{
	int a = 0;
	int b = 0;
	int c = 0;
	int time = 0;
	for (int i = 100; i <= 999;i++)
	{
		c = i % 10;
		b = (i - c) / 10 % 10;
		a = i / 100;

		if (a==0||b==0||c==0)
		{
			continue;
		}
		if ((a == b && (a + b>c)) || (b == c && (c + b>a)) || (c == a && (a + c>b)))
		{
			time++;
		}
	}
	cout << time << endl;
	return 0;
}

发表于 2016-06-28 21:24:52 回复(11)
先考虑等边的情况:有9种
再考虑等腰的情况:每种情况其实符合条件的就是小于两个等边值相加的和,且除了本身(等边的情况) 
1(0):没有
 2(2):只能为1,3
3(4):只能为1,2,4,5
4(6):只能1,2,3,5,6,7
5(8)、6(8)、7(8)、8(8)、9(8):1~9中都只要除了他们本身,其它都可以
然后对其中的没一种再排列组合,每一种都有3种情况,其实就是在两个等边中插孔;
所以最终为:9+(0+2+4+6+8*5)*3=165;
发表于 2016-09-04 11:20:31 回复(1)
等边:
a=b=c=1时,1,2,3,4,5,6,7,8,9,此时n有9个
等腰:
a=b=1时,c<a+b=2,c=1,与等边三角形情况重复,n = 0;
a=b=2时,c<4,则c=1,3(c=2是等边三角形),n = 2
a=b=3时,c<6,则c=1,2,4,5,n = 4
a=b=4时,c<8,则c=1,2,3,5,6,7,n = 6
a=b=5时,c<10,有c=1,2,3,4,6,7,8,9,n = 0
共有n = 52;
若a,c是腰时,n = 52,b,c是腰时,n = 52; 
所以n共有9+3×52=165
发表于 2019-01-21 18:54:44 回复(0)
题目是问等腰三角形的个数有多少,不是问能组成等腰三角形的数有多少!也就是说: a=2,b=2,c=1组成的三角形与 a=2,b=1,c=2; a=1,b=2,c=2 组成的三角形没有区别,所以不应该乘三,答案是61个
发表于 2017-03-15 10:41:42 回复(1)
先考虑等边三角形:
a=b=c,n=1,2,3,4,5,6,7,8,9  有9个
再考虑等腰三角形 a,b是腰,则a=b:
a=b=1时,c<2,与等边三角形重复
a=b=2,c<4,取1,3
a=b=3,c<6,取1,2,4,5
a=b=4,c<8,取1,2,3,5,6,7
a=b=5,c<10,取1,2,3,4,6,7,8,9
a=b=6,c<12,取1,2,3,4,5,7,8,9
类推a=b=7,取8个值
a=b=8,取8个值
a=b=9,取8个值
综上可得:a,b为腰时,等腰三角形52个
同理可得,a,c为腰时,等腰三角形52个
b,c为腰时,等腰三角形52个
总结:所有三角形52x3加9个,共计165个


发表于 2022-05-18 07:20:22 回复(0)
要考虑能组成三角形
发表于 2021-08-01 21:55:28 回复(0)
编程思维
function tri(){
        var arr1 = [];
        for(var i = 100; i<=999; i++){
            arr1.push(i)
        };
        return arr1.filter((item)=>{
            var aa = String(item).split('');
            aa.sort((a,b)=>{return b-a});
            return (String(item).indexOf('0')==-1&&parseInt(aa[0])<(parseInt(aa[1])+parseInt(aa[2]))&&((aa[0]==aa[1])||(aa[2]==aa[1])))
        }).length;
    }


编辑于 2020-12-25 17:29:04 回复(0)
#include <stdio.h>

int main()
{
    int i=100;
    int one=0,ten=0,hand=1;
    int ang=0,bottom=0;
    int num=0;
    for(i=100;i<1000;i++){
        hand = i / 100;
        ten = (i % 100) / 10;
        one = i % 10;
        if(hand == ten)
        {
            ang = hand;
            bottom = one;
        } else if(hand == one)
        {
            ang = hand;
            bottom = ten;
        } else if(ten == one)
        {
            ang = ten;
            bottom = hand;
        } else
            continue;
        if(ang * 2 > bottom && bottom > 0)
            num ++;
    }
    printf("%d",num);
    return 0;
}

发表于 2020-04-03 14:57:01 回复(0)
等腰从1到9,等边都是1个,两边之和大于第三边,5以后情况相同。1+(1+2*3)+(1+4*3)+(1+6*3)+(1+8*3)*5
发表于 2020-03-25 08:59:27 回复(0)
1 从特殊到一般;
2 理清这里的约束条件;
3 按照规律进行列举;
发表于 2019-10-03 11:57:04 回复(0)
这题问的是数字几个还是三角形几个...
发表于 2019-03-08 12:05:44 回复(0)
问题描述不清晰,没有去除重复情况
发表于 2019-02-03 13:02:26 回复(0)
小学的时候做过有关数字100-999的题,然后答案是166,然后直接进数字是D你信么。
发表于 2018-06-05 02:45:16 回复(0)
f
发表于 2018-05-04 16:21:33 回复(0)
这个是讲究顺序的
发表于 2018-03-31 11:25:00 回复(0)