三元组

183 阅读2分钟

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;
    
}

总结:

本题主要考察数学思维和按位或运算符。