173 条题解
-
2713055361062 LV 5 @ 2017-03-12 20:30:34
#include<iostream> using namespace std; int main() { int a[20002],k[101],i,n; cin>>n; for(i=0;i<n;i++) { cin>>k[i]; a[k[i]]=1; } int c=0; for(i=0;i<n;i++) { for (int j=i+1;j<n;j++) { a[k[i]+k[j]]=0; } } for(i=0;i<n;i++) { if(a[k[i]]==0)c++; } cout<<c; return 0; }
-
42018-09-03 20:48:53@
#include <iostream>
using namespace std;
int main(){
int n,a[102],ans=0,ans1=0;
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i];
for(int i=1;i<=n;i++)
{ans1=ans;
for(int j=1;j<=n;j++)
{if(j!=i)for(int k=1;k<=n;k++)
if(k!=i&&k!=j&&a[i]==a[j]+a[k]){ans++;break;}//判断是否已找到相加等于第三个数的数 ,如果是,则避免剩下关于k的循环
if(ans1!=ans)break;}//判断是否已找到相加等于第三个数的数 ,如果是,则避免剩下关于j的循环
}
cout<<ans;
return 0;
} -
32019-05-26 17:18:45@
#include <cstdio> #include <iostream> #include <set> using namespace std; set<int> num; // 查找用集合 set<int> res; // 去重用集合 int n,a[105],tmp; int main(){ //freopen("count.in","r",stdin); //freopen("count.out","w",stdout); cin>>n; for(int i=1;i<=n;++i){ cin>>a[i]; //输入数值 num.insert(a[i]); //用集合方便查找 } for(int i=1;i<=n;++i){ //枚举a[i] for(int j=i+1;j<=n;++j){ //枚举a[j] int tmp=a[i]+a[j]; //接下来定义tmp,它是所枚举的两数之和 set<int>::iterator it=num.find(tmp); // 直接在集合中查找tmp //注意,find函数返回的是一个迭代器,所以要用一个迭代器来存储find的返回值 if(it!=num.end()) { // 在find中,如果没有找到集合中的元素,那么迭代器会在集合的末尾。 //所以如果it不在集合末尾,那么说明it在集合中出现过 res.insert(*it); //在去重集合中插入 } } } cout<<res.size();//直接输出集合内元素数量 return 0; }
-
22018-09-03 20:12:12@
#include<iostream>
using namespace std;int sum=0,n,a[100];
int search(int c,int b) //c=weizhi,b=shu
{
for(int i=0;i<n;i++)
{
if(i==c)
continue;
for(int j=0;j<n;j++)
{
if(j==c||j==i)
continue;
if(a[i]+a[j]==b)
{
sum++;return 0;
}
}
}
return 0;
}int main()
{
cin>>n;
for(int i = 0;i < n ; i++)
cin>>a[i];
for(int i=0;i<n;i++)
search(i,a[i]);
cout<<sum;
return 0;
} -
22018-09-01 21:16:04@
n, l, dic, ans = int(input()), list(map(int, input().split())), dict(), 0 for i in range(0, n): for j in range(i+1, n):dic[l[i]+l[j]] = 0 for i in l: if i in dic:ans += 1 print(ans)
-
22018-05-02 22:26:59@
思路:
1. 读入n个数(类似于废话哎)
2. 扫描所有数(i与i+1~n比较),两两相加并标记为1(表示存在这个和)
3. 再扫描所有数,如果这个数在数组中标记唯一,表示有两个数和为这个数,则答案数+1
#include <iostream> using namespace std; int n, ans; int a[101], save[20001]; int main() { cin >> n; 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++) { save[a[i] + a[j]] = 1; } for(int i=1; i<=n; i++) { if(save[a[i]] == 1) ans++; } ans ++; cout << ans; return 0; }
一道简单模拟题,望各位都能AC!
-
12024-11-30 19:27:12@
#include<iostream> #include<cstdio> using namespace std; const int M=20005;//20005由于最大值是10000+10000=20000,const int是静态定义,定义后该值(即M)无法修改。 int t[M],g[M];//t是桶,t[i]表示值为i的数在集合中两两相加出现了几次,g[i]表示值为i的数是否在原集合中,1为在,0为不在 int n,a[105],ans,maxn;//a数组开105是由于总共最多100个数 int main(){ cin>>n; for (int i=1;i<=n;i++){ cin>>a[i];//读入 g[a[i]]=1;//在集合中赋值为1 } for (int i=1;i<n;i++){//暴力枚举求出可以加出的数 for (int j=i+1;j<=n;j++){ t[a[i]+a[j]]++;//a[i]+a[j]这个数被加出来了 maxn=max(maxn,a[i]+a[j]);//求求出数中最大值 } } for (int i=1;i<=maxn;i++){//只需要枚举到最大值即可 if (t[i]>0&&g[i]) ans++;//判断是否满足,满足就ans++ } cout<<ans<<endl; return 0; }
-
12017-09-27 15:11:35@
#include<stdio.h>
int main()
{ int n,i,j,sum=0,c[20100],a[110];
scanf("%d",&n);
memset(c,sizeof(c),0);
for(i=0;i<n;i++) scanf("%d",&a[i]);
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
c[a[i]+a[j]]=1;
for(i=0;i<n;i++) if(c[a[i]]==1) sum++;
printf("%d\n",sum);
} -
02024-08-27 20:25:07@
#include <iostream> #include <algorithm>//排序函数在这个头文件中 using namespace std; int main(void) { int n, a[105], ans = 0; cin >> n; for (int i = 1; i <= n; i++) cin >> a[i]; sort(a + 1, a + n + 1);//从小到大排序,方便后面操作 for (int i = 1; i <= n; i++) { for (int j = 1; j < i; j++)//遍历比a[i]小的数 if (a[j] * 2 >= a[i])//去掉下面不可能会成功的数 for (int k = 1; k < j; k++)//遍历比a[j]更小的数 if (a[j] + a[k] == a[i]) {//找到 ans++;//增加 goto end;//结束,免得一个数有多种组合 } end: continue;//必须加,否则报错 } cout << ans; return 0; }
帮忙点个赞呗
-
02022-06-28 08:58:29@
一道简单模拟题
- 用st数组标记所有数字;
- 枚举两个加数,如果两数的和被标记过,答案+1;
- 输出答案。
#include <iostream> #include <cstring> #include <algorithm> #include <cstdio> #include <cmath> using namespace std; const int N = 110, M = 20010; int a[N]; bool st[M]; int main() { int n; scanf("%d", &n); for (int i = 1; i <= n; i ++ ) { scanf("%d", &a[i]); st[a[i]] = true; } int ans = 0; for (int i = 1; i <= n; i ++ ) { for (int j = i + 1; j <= n; j ++ ) { if (st[a[i] + a[j]]) { ans ++ ; st[a[i] + a[j]] = false; } } } printf("%d", ans); return 0; }
-
02022-06-23 17:36:41@
#include<bits/stdc++.h> int a[110]; int n; int num=0; int v[110]; int main() { scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&a[i]); for(int i=1;i<n;i++) for(int j=i+1;j<=n;j++) for(int k=1;k<=n;k++) if(k!=i&&k!=j&&a[i]+a[j]==a[k]&&v[k]==0) { num++; v[k]=1; } printf("%d",num); return 0; }
-
02022-05-28 20:20:44@
#include <stdio.h> int main() { int n,i,k,m=0,flag=0; int a[10000],b[10000]; scanf("%d",&n); for(i=0;i<n;i++) { scanf("%d",&a[i]); } for(i=0;i<n-1;i++) { for(k=i+1;k<n;k++) { b[m]=a[i]+a[k]; m++; } } for(i=0;i<n;i++) { for(k=0;k<m;k++) { if(a[i]==b[k]) { flag++; break; } } } printf("%d",flag); return 0; }
-
02022-02-14 15:05:28@
用哈希表保存两两相加的值,然后在循环一波找到就ans++;
#include<iostream> #include<string> #include<map> using namespace std; int n; int arr[101]; int main() { int ans = 0; //哈希表 map<int, int>hashmap; cin.tie(0); cin >> n; for (int i = 0; i < n; i++) { cin >> arr[i]; } for (int i = 0; i < n-1; i++) { for (int j = i + 1; j < n; j++) { hashmap[arr[i] + arr[j]] = 1; // 记录相加的值 } } for (int i = 0; i < n; i++) { if (hashmap[arr[i]] == 1) { //如果数组中的值能在哈希表里面找到就ans++ ans++; } } cout << ans << endl; return 0; }
-
02021-11-02 08:26:40@
#include<stdio.h> int main() { int i,n,a[100],b[100]= {0},s=0; scanf("%d",&n); for(i=0; i<n; i++) scanf("%d",&a[i]); int j,k,m; for(j=0; j<n-1; j++) for(k=j+1; k<n; k++) for(m=0; m<n; m++) if(a[m]==(a[j]+a[k])) { b[m]=1; break; } for(i=0; i<n; i++) if(b[i]==1) s++; printf("%d",s); }
-
02021-10-16 12:22:03@
#include<iostream> using namespace std; int a[20002],k[110];//数组 int main() { int n,cnt;//cnt计数 cin >> n; for(int i = 0;i < n;i++)//读入,记录 { cin >> k[i]; a[k[i]] = 1; } for(int i = 0;i < n;i++)//有相同的记为0 { for (int j=i+1;j<n;j++) { a[k[i]+k[j]]=0; } } for(int i = 0;i < n;i++)//记录0的个数 { if(a[k[i]]==0) { cnt++; } } cout << cnt << endl; return 0; }
一个比较简单的思路
单独为1 重复为0 -
02021-08-08 20:24:24@
#include<bits/stdc++.h> using namespace std; int n , a[10001] , s , b[10001]; int main(){ cin >> n; for(int i = 1;i <= n;i++) cin >> a[i]; for(int i = 1;i <= n;i++) { bool f = true; for(int j = 1;j <= n;j++) { for(int k = 1;k <= n;k++) if(i != j && i != k && j != k && a[j] + a[k] == a[i]) { s++; f = false; break; } if(!f) break; } } cout << s; return 0; }
-
02021-07-15 16:27:45@
#include <iostream>
#include <vector>
using namespace std;
struct num{
int number,add=0;
};
int main()
{
int n,sum=0;
cin>>n;
vector<num> nums(n);
for(int i=0;i!=n;i++){
cin>>nums[i].number;
}
for(int i=0;i!=n;i++){
for(int j=i+1;j<n;j++){
if(nums[i].number>nums[j].number){
int t=nums[i].number;
nums[i].number=nums[j].number;
nums[j].number=t;
}
}
}
for(int i=0;i!=n;i++){
for(int j=i+1;j<n;j++){
for(int k=j+1;k<n;k++){
if(nums[i].number+nums[j].number==nums[k].number) nums[k].add=1;
}
}
}
for(int i=0;i!=n;i++){
if(nums[i].add==1) sum++;
}
cout<<sum<<endl;
} -
02021-06-12 16:44:40@
#include<bits/stdc++.h>
using namespace std;
int n,*a,s,t,u,ans;
bool f[10001];
int main(){
cin>>n;
a=(int*)malloc(n*sizeof(int));
for(int i=0;i<n;i++)
cin>>a[i];
for(int i=0;i<n;i++){
s=a[i];
for(int j=0;j<n;j++){
if(j==i)continue;//不同的数
t=a[j];
for(int k=0;k<n;k++){
if(k==i||k==j)continue;
u=a[k];
if(s+t==u && !f[u]){
ans++;f[u]=1;//已经算过的
}
}
}
}
cout<<ans<<endl;
return 0;
} -
02021-05-18 14:01:19@
import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.Arrays; import java.util.HashSet; import java.util.Scanner; import java.util.Set; /** * @author wpx * @version V1.0 * @Package com.algorithm * @date 2021/5/18 10:46 */ public class Main { public static void main(String[] args) { Scanner sc = new Scanner(new BufferedReader(new InputStreamReader(System.in))); int totalNum = Integer.valueOf(sc.nextLine()); String numStr = sc.nextLine(); String[] numsStr = numStr.split(" "); int[] nums = new int[totalNum]; // 构建辅助数组 Set<Integer> set = new HashSet<Integer>(); for(int i = 0; i < numsStr.length; i++){ set.add(Integer.valueOf(numsStr[i])); nums[i] = Integer.valueOf( numsStr[i]); } Arrays.sort(nums); int count = 0; for(int i = 2; i < nums.length; i++){ int num = nums[i]; for(int j = i - 1; j >= 0; j--){ int leftNum = num - nums[j]; if(set.contains(Integer.valueOf(leftNum)) && leftNum != nums[j]){ count++; break; } } } System.out.println(count); } }
-
02021-05-17 15:32:43@
#include <iostream>
using namespace std;
bool flag[20001]={false};
int main()
{
int n,a[101],count=0;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
for(int j=1;j<i;j++){
flag[a[i]+a[j]]=true;
}
}
for(int i=1;i<=n;i++){
if(flag[a[i]]){
count++;
}
}
cout<<count<<endl;
}
信息
- ID
- 1911
- 难度
- 6
- 分类
- (无)
- 标签
- 递交数
- 17097
- 已通过
- 4518
- 通过率
- 26%
- 被复制
- 28
- 上传者