现有一个下标从 0 开始的非空整型数组 nums,它的大小不超过一百 ,请编写程序计算满足如下要求的三元组的数目:nums[a] + nums[b] == nums[c] 且 a<b<c。
输入输出格式
输入格式
第一行有一个整数 numsSize,表示数组 nums 的大小;
第二行有 numsSize 个整数,分别表示数组 nums 的所有元素,每个整数用一个空格隔开。
输出格式
一个数字,表示符合题目要求的三元组的数量。
输入输出样例1
输入
4
1 2 3 6
输出
1
//代码如下
//表示数组的大小
//数组所有元素 创建数组
//满足关系::nums[a] + nums[b] == nums[c] 且 a<b<c。 使用全排列模型 递归操作
#include<iostream>
#include <vector>
#include<algorithm>
using namespace std;
#define MAXSIZE 1000
//数组大小
int numsSize;
//创建数组
vector<int> create(int lend){
vector<int> ss(lend);
for(int i=0;i<ss.size();i++)
cin>>ss[i];
sort(ss.begin(),ss.end());
return ss;
}
//source
vector<int> source;
//存储结果
int res=0;
vector<int> num;
//避免重复选择
bool vs[MAXSIZE];
//检查满足关系
bool check(vector<int> num){
int a=num[0],b=num[1],c=num[2];
if(a+b==c)return true;
return false;
}
//打印数组
void print(vector<int> nn){
for(int n:nn)
cout<<n<<" ";
cout<<endl;
}
//使用递归实现全排列
void dfs(int start){
//正在处理第start下标
if(num.size()==3){
if(check(num))res++;
//print(num);
return;}
for(int i=start;i<source.size();i++){
//选择
num.push_back(source[i]);
//实现a<b<c
dfs(i+1);
//回溯
num.pop_back();
}
}
int main(){
cin>>numsSize;
source=create(numsSize);
dfs(0);
cout<<res<<endl;
return 0;
}
/*
4
1 2 3 6
5
3 3 6 4 5
*/
3006

被折叠的 条评论
为什么被折叠?



