题目
题意
一个袋子中有 n 张标有数字的卡片,由袋子中选 4 张卡片(可重复)是否存在 4 张卡片的和为 m。
思路
-
根据题目的数据范围(n <= 50)
-
可判断可以使用暴力枚举算法
-
时间复杂度为 n 3 n^3 n3 可接受
坑点
无
算法一:暴力枚举
时间复杂度
O ( n 3 ) O(n^3) O(n3)
实现步骤
-
四层嵌套循环也可以使用递归实现
-
判断四张卡片的和是否等于 m
代码
#include<bits/stdc++.h>
#define endl '\n'
#define int long long
using namespace std;
const int N = 2e5+10;
typedef long long ll;
int num[N];
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
int n,m;
cin>>n>>m;
for(int i=0;i<n;i++)
{
cin>>num[i];
}
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
for(int k=0;k<n;k++)
{
for(int o=0;o<n;o++)
{
if(num[i]+num[j]+num[k]+num[o]==m)
{
cout<<"Yes"<<endl;
return 0;
}
}
}
}
}
cout<<"No"<<endl;
return 0;
}
总结
暴力水题