4 条题解
-
1
题解
思路
循环枚举
解题方法
循环枚举每一个可能的i与j,如果abs(a[i]-a[j])等于k,输出Yes并return 0。
注:abs为求绝对值
Code
#include<bits/stdc++.h> using namespace std; int n,m,a[103]; int main(){ cin>>n>>m; for(int i=1;i<=n;i++){ cin>>a[i]; } for(int i=1;i<=n;i++){ for(int j=i+1;j<=n;j++){ if(abs(a[i]-a[j])==m){ cout<<"Yes"; return 0; } } } cout<<"No"; return 0; }
-
0
很简单的模拟题。考虑二重循环模拟。
第一重循环 ,第二重循环 ,然后再进行判断即可。
时间复杂度 ,可以通过本题。
伪代码
AC Code
#include<bits/stdc++.h> using namespace std; vector<int> a(1); int main() { int n,k; cin>>n>>k; for(int i=1;i<=n;i++) { int x; cin>>x; a.push_back(x); } for(int i=1;i<=n;i++) { for(int j=i+1;j<=n;j++) { if(abs(a[i]-a[j])==k) { cout<<"Yes"; return 0; } } } cout<<"No"; return 0; }
-
0
可以对于每个数 ,用一个
map
来记录他们出现过。那么只需要将所有数存进map
后,对于每个数 ,查询 是否存在即可。时间复杂度 , 为map
常数。#include <bits/stdc++.h> using namespace std; int a[100005]; map<int,int> mp; int main() { int n,k; cin >> n >> k; for(int i = 1;i <= n;i++) { cin >> a[i]; mp[a[i]]++; } for(int i = 1;i <= n;i++) { if(mp[a[i]+k]) { cout << "Yes"; exit(0); } } cout << "No\n"; return 0; }
-
-1
题解
思路
两次循环遍历出所有可能的组合。
若前者减去后者的差为 ,答案加 ,最终输出即可。
解题方法
没什么好说的,枚举每个可能的 和 ,统计答案。
复杂度
时间复杂度:
因为是双重循环,所以是 。
Code
#include <bits/stdc++.h> using namespace std; int a[110]; int main() { int n,k,op=0; cin>>n>>k; for(int i=1;i<=n;i++) cin>>a[i]; for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { if(j!=i && a[i]-a[j]==k) { op=1; break; } } } if(op) cout<<"Yes"; else cout<<"No"; return 0; }
- 1
信息
- ID
- 67
- 时间
- 3000ms
- 内存
- 512MiB
- 难度
- 1
- 标签
- 递交数
- 385
- 已通过
- 244
- 上传者