1. 问题描述:
请你计算共有多少个整数三元组 (a,b,c) 能够同时满足:
1 ≤ a ≤ b ≤ c ≤ n
a ⊕ b ⊕ c = 0,其中⊕表示按位异或;(a,b,c) 可以构成一个非退化三角形(即任意两边之和均大于第三边)。
输入格式
一个整数 n。
输出格式
一个整数,表示满足条件的三元组的个数。
数据范围
前三个测试点满足 1 ≤ n ≤ 10,所有测试点满足 1 ≤ n ≤ 100
输入样例1:
6
输出样例1:
1
输入样例2:
10
输出样例2:
2
来源:https://www.acwing.com/problem/content/4317/
2. 思路分析:
分析题目可以知道使用三层循环暴力枚举即可,并且需要注意在判断异或操作结果是否等于0的时候需要写上括号。
3. 代码如下:
go:
package main
import "fmt"
func main() {
var (
n int
)
fmt.Scan(&n)
count := 0
for i := 1; i <= n; i++ {
for j := i; j <= n; j++ {
for k := j; k <= n; k++ {
// 需要注意异或操作需要加上括号
if (i^j^k) == 0 && i+j > k && i+k > j && j+k > i {
count += 1
}
}
}
}
fmt.Println(count)
}
python:
if __name__ == "__main__":
n = int(input())
count = 0
for i in range(n + 1):
for j in range(i, n + 1):
for k in range(j, n + 1):
if (i ^ j ^ k) == 0 and i + j > k and i + k > j and j + k > i:
count += 1
print(count)
java:
import java.util.Scanner;
public class Main {
public static void main(String []args){
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int count = 0;
for (int i = 1; i <= n; i++){
for (int j = i; j <= n; j++){
for (int k = j; k <= n; k++){
if ((i ^ j ^ k) == 0 && i + j > k && i + k > j && j + k > i){
count += 1;
}
}
}
}
System.out.println(count);
}
}