Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
题目信息:
请你计算共有多少个整数三元组 (a,b,c) 能够同时满足:
- 1≤a≤b≤c≤n。
- a⊕b⊕c=0,其中 ⊕表示按位异或。
- (a,b,c) 可以构成一个非退化三角形(即任意两边之和均大于第三边)。
输入格式
一个整数 n。
输出格式
一个整数,表示满足条件的三元组的个数。
数据范围
前三个测试点满足 1≤n≤10。 所有测试点满足 1≤n≤100。
输入样例:
6
输出样例:
1
输入样例2:
10
输出样例2:
2
思路:
该题我们首先,就根据题意想到暴力破解的解决方案,即:用三层for循环循环遍历每一个数字,然后根据题目中所给出的条件判断是否满足,第二个条件我们只需借助按位或的运算符^进行判断,第三个条件判断三条边是否满足三角形,我们借助数学的思想,两条小边加在一起能够大于第三条边就可以满足情况。接下来我们看看是否会超时,他的数据集,n最大取到100,也就是说我们的三层循环最多达到 1000000的级别,是不会有超时的情况发生的。然后根据我们的想法,把其变为落地的编码即可通过本题目。
代码
#include <iostream>
using namespace std;
int main(){
int n;
cin >> n;
int res = 0;
for(int i = 1;i <= n;i ++){
for(int j = i;j <=n;j ++){
for(int z = j;z <= n;z ++){
if((i + j) > z && (i ^ j ^ z) == 0 ) res ++;
}
}
}
cout << res << endl;
return 0;
}
总结:
本题主要考察数学思维和按位或运算符。