方法一:
#include<iostream>
#include<algorithm>
#include<vector>using namespace std;
char flag=0;
int n=0;
int m=0;
int shu[1000]={0};
int i;
int main() {cin >> n;cin >> m;for (i=0;i<n;i++){cin >> shu[i];}vector<int>x;for(i=0;i<n;i++){for(int j=0;j<n;j++){x.push_back(shu[i]+shu[j]);}}//输出枚举的值
// for (auto element : x) {
// std::cout << element << " ";
// }//排序sort(x.begin(),x.end());for (i=0;i<n;i++){for(int j=0;j<n;j++){int key = m-(shu[i]+shu[j]);if(binary_search(x.begin(),x.end(),key)){puts("Yes");return 0;}}}puts("No");return 0;
}
道理很简单,但是我都不会,嘿嘿嘿!!!
最粗暴的方法,四个for 但是必超时
抽四次,也就是都可以碰到,那就枚举。
1.将四个数拆分成两个数,也就是m=a+b,n=c+d。总和=m+n。
2.我将m算出来,得到一个数组,然后用二分法在这个数组来找n,如果存在,那就成立,不存在就不成立。(要成立c+d和a+b必然在其中两个随机数之和里面)。
2.三角形
也是通过了;第二次答题用了第一道题的方法,很好!!嘿嘿嘿。
第一次也是细节不够啊。。。
这个是题目:
#include<iostream>
#include<algorithm>
#include<vector>
// a+b>c
using namespace std;
char flag=0;
int n=0;
int m=0;
int shu[100]={0};
int i;
int a,b,c,acout;
vector<int> s;
int main() {cin >> n;for (i=0;i<n;i++){cin >> shu[i];}if(n>=3){for(int j=0;j<n-2;j++){a=shu[j];for(int k=j+1;k<n-1;k++){b=shu[k];for(int l=k+1;l<n;l++){c=shu[l];if((a+b>c)&&(a+c>b)&&(b+c>a)){s.push_back(a+b+c);acout++;}else{s.push_back(0);acout++;}}}}sort(s.begin(),s.end());cout<<s[acout-1]<<endl;}else{cout<<0<<endl;}return 0;
}
代码就简单的不行。其实就是暴力枚举。用了容器嘿嘿。其实容器就看成更加简单的数组。