题解:B4058 [语言月赛 202411] 三角含数
考察数位的提取、子函数的定义、数组、循环结构,对后三者的考察较为灵活。
首先枚举
然后先提取
由于只用分成两组数,只需要枚举
接下来是判断三个数能否组成三角形,根据小学知识,设三个数从小到大分别为
然后就 OK 了,可以发现我们没必要特判某个数位为
bool check(int a,int b,int c){
int A=min({a,b,c}),C=max({a,b,c}),B=a+b+c-A-C;
return A+B>C;
}
int a[7],b[4];
bool Check(int x){
for(int i=1;i<=6;i++)a[i]=x%10,x/=10;
for(int i=2;i<=6;i++)for(int j=i+1;j<=6;j++)if(check(a[1],a[i],a[j])){
int n=0;
for(int k=2;k<=6;k++)if(k!=i&&k!=j)b[++n]=a[k];
if(check(b[1],b[2],b[3]))return 1;
}
return 0;
}
int main(){
int l,r,ans=0;
cin>>l>>r;
for(int i=l;i<=r;i++)if(Check(i))ans++;
cout<<ans;
return 0;
}