题解

173 条题解

  • 27
    @ 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;
    }
    
  • 4
    @ 2018-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;
    }

  • 3
    @ 2019-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;
    }
    
  • 2
    @ 2018-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;
    }

  • 2
    @ 2018-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)
    
  • 2
    @ 2018-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!

  • 1
    @ 2024-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;
    }
    
  • 1
    @ 2017-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);
    }

  • 0
    @ 2024-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;
    }
    

    帮忙点个赞呗

  • 0
    @ 2022-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;
    }
    
  • 0
    @ 2022-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;
    }
    
  • 0
    @ 2022-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;
    }
    
  • 0
    @ 2022-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;
    }
    
  • 0
    @ 2021-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);
    }
    
  • 0
    @ 2021-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

  • 0
    @ 2021-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;
    }
    
  • 0
    @ 2021-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;
    }

  • 0
    @ 2021-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;
    }

  • 0
    @ 2021-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);
        }
    }
    
    
  • 0
    @ 2021-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
上传者