题解

176 条题解

  • 0
    @ 2014-12-14 18:45:42

    水爆了。。
    var n,i,j,k,sum:longint;
    a,b:array[1..100] of longint;
    begin
    read(n);
    fillchar(b,sizeof(b),0);
    for i:=1 to n do read(a[i]);
    for i:=1 to n do
    for j:=i+1 to n do
    for k:=1 to n do
    if (a[i]<>a[j]) and (a[i]+a[j]=a[k]) then b[k]:=1;
    for i:=1 to n do inc(sum,b[i]);
    writeln(sum);
    end.

  • 0
    @ 2014-12-13 19:25:57

    大水题。。。。

  • 0
    @ 2014-11-30 09:36:50

    var
    a:array[1..100] of longint;
    b:array[1..10000] of boolean;
    n,i,j,k,t:longint;
    begin
    readln(n);
    for i:=1 to n do
    read(a[i]);
    for i:=1 to n do
    for j:=(i+1) to n do
    for k:=1 to n do

    if a[i]+a[j]=a[k] then b[a[k]]:=true;
    for i:=1 to n do
    if b[a[i]]=true then inc(t);
    writeln(t);
    end.

  • 0
    @ 2014-11-29 08:34:41

    #include<iostream>
    #include<algorithm>
    #include<math.h>
    #include<string.h>
    #include<stdio.h>
    #include<stdlib.h>
    using namespace std;
    bool cmp(int a,int b)
    {
    if(a>b)return 1;
    return 0;
    }
    int a[10000];
    int main()
    {
    int n,ans=0;
    cin>>n;
    for(int i=0;i<n;i++)
    cin>>a[i];
    sort(a,a+n,cmp);
    for(int i=0;i<n-1;i++)
    {
    int y=i,z=n;
    while(a[y+1]!=a[z-1]&&a[y+1]!=0&&a[z-1]!=0)
    {
    if(a[i]==a[y+1]+a[z-1]){
    ans++;

    break;
    }
    else if(a[i]>a[y+1]+a[z-1])z--;
    else if(a[i]<a[y+1]+a[z-1])y++;

    }
    }
    cout<<ans<<endl;
    system("pause");
    return 0;
    }

  • 0
    @ 2014-11-26 13:18:29

    var n,i,j,k,z:longint;
    c:array[1..100] of longint;
    d:array[1..100] of longint;
    begin
    readln(n);
    for i:=1 to n do read(c[i]);
    fillchar(d,sizeof(d),0);
    for i:=1 to n do
    for j:=i+1 to n do
    for k:=1 to n do
    if (c[i]+c[j]=c[k]) then inc(d[k]);
    for i:=1 to n do
    if d[i]>0 then inc(z);
    writeln(z);
    end.

  • 0
    @ 2014-11-24 16:54:54

    var a,b,c,d,e:longint;
    k,j:array[1..100]of longint;
    begin
    read(a);
    for b:=1 to a do
    read(k[b]);
    for b:=1 to a do
    for c:=1 to a do
    for d:=c+1 to a do
    if k[c]+k[d]=k[b] then begin j[b]:=1; break; break; end;
    for b:=1 to a do
    if j[b]=1 then inc(e);
    writeln(e);
    end.

  • -1
    @ 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;
    }
    
  • -1
    @ 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;
    }
    
  • -1
    @ 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;
    }
    
  • -1
    @ 2018-09-06 12:37:32

    看看下一张

  • -1
    @ 2018-08-11 10:55:20

    #include <cstdio> // 这题可以用桶排序的思想
    #include <iostream>
    using namespace std;
    int t[20005], g[20005]; // t是桶,t[i]表示的值为i的数在集合中两两相加的次数;g[i]表示值为i的数是否在集合中,1为在,0为不在
    int main(){
    int n;
    int sum = 0, a[101];
    scanf("%d",&n);
    for(int i = 1; i <= n; i++){
    scanf("%d",&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]]++;
    }
    }
    for(int i = 1; i <= 20002; i++){
    if(t[i] > 0 && g[i]) //判断是否满足条件
    sum++;
    }
    printf("%d",sum);
    return 0;

    }

  • -1
    @ 2018-04-23 20:29:17

    import java.util.Scanner;

    public class Main {

    public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    int a = in.nextInt();
    int sum[] = new int[a];
    boolean num[] = new boolean[a];
    int x = 0, y = 0, d = 0;
    for (int i = 0; i < sum.length; i++)
    sum[i] = in.nextInt();
    for (int i = 0; i < sum.length; i++) {
    for (int j = i; j < sum.length; j++) {
    for (int z = 0; z < sum.length; z++) {
    if (sum[i] + sum[j] == sum[z] && i != j && i != z && j != z&&(!num[z])) {
    num[z]=true;
    y++;
    }
    }
    }
    }
    System.out.println(y);
    }
    }

  • -1
    @ 2018-04-15 19:55:51

    #include<iostream>
    #include<cstdio>
    using namespace std;
    int t[200005],g[200005];//t是桶,t[i]表示值为i的数在集合中两两相加出现了几次,g[i]表示值为i的数是否在集合中,1为在,0为不在
    int n,a[105],ans;
    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]]++;//被加出来了
    }
    }
    for (int i=1;i<=200002;i++){
    if (t[i]>0&&g[i]) ans++;//判断是否满足,满足ans++
    }
    cout<<ans;
    return 0;
    }

  • -1
    @ 2018-04-08 19:52:25

    有没有python做的

  • -1
    @ 2018-03-14 23:42:48

    简单的模拟 加一次排序可以减少重复 代码如下

    #include <cstdio>
    #include <algorithm>
    using namespace std;
    int n, ans;
    int a[101];
    bool v[101];
    int main(){
        int n;
        scanf("%d", &n);
        for(int i = 1; i <= n; ++ i)
            scanf("%d", &a[i]);
        sort( a + 1, a + 1 + n);
        for(int i = 1; i <= n - 2; ++ i)
        for(int j = i + 1; j <= n - 1; ++ j)
        for(int k = j + 1; k <= n; ++ k)
        if(a[i] + a[j] == a[k] && v[k] == 0){
            ans ++;
            v[k] = 1;
        }
        printf("%d", ans);
        return 0;
    }
    
  • -1
    @ 2018-03-11 00:03:05

    #include<stdio.h>
    int main()
    {
    int n,i,j,k,flag;
    scanf ("%d",&n);
    int a[n],count=0;
    for (i=0;i<n;i++)
    {
    scanf ("%d",&a[i]);
    }
    for (i=0;i<n;i++)
    {
    flag=0;
    for (j=0;j<n;j++)
    {
    if (j!=i)
    for (k=0;k<n;k++)
    {
    if (k!=j&&k!=i)
    {
    if (a[i]==a[k]+a[j])
    {
    count++;
    flag=1;
    }
    }
    if (flag==1)
    break;
    }
    if (flag==1)
    break;
    }
    }
    printf ("%d",count);
    }

  • -1
    @ 2018-02-28 15:30:46

    #include<iostream>
    #include<cstdio>
    using namespace std;
    int t[200005],g[200005];//t是桶,t[i]表示值为i的数在集合中两两相加出现了几次,g[i]表示值为i的数是否在集合中,1为在,0为不在
    int n,a[105],ans;
    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]]++;//被加出来了
    }
    }
    for (int i=1;i<=200002;i++){
    if (t[i]>0&&g[i]) ans++;//判断是否满足,满足ans++
    }
    cout<<ans<<endl;
    return 0;
    }

  • -1
    @ 2017-11-26 23:43:43

    #include <stdio.h>
    #include <iostream>
    #include <string.h>
    using namespace std;
    int a[105];
    int b[105];
    int m;
    void input(int n)
    {
    int i;
    for(i=1;i<=n;i++)
    {
    cin>>a[i];
    }

    }
    void sort(int n){
    int i;
    int j;
    int tmp;
    for(i=1;i<=n-1;i++)
    for(j=1;j<=n-i;j++)
    {
    if(a[j]>a[j+1])
    {
    tmp=a[j];
    a[j]=a[j+1];
    a[j+1]=tmp;

    }
    }
    }
    int look(int aim,int left,int right){
    int mid=(left+right)/2;
    while(left<right)
    {

    if(a[mid]>aim)
    {
    right=mid;
    mid=(right+left)/2;
    continue;
    }

    if(a[mid]<aim)
    {

    left=mid+1;
    mid=(right+left)/2;
    continue;

    }
    // cout<<"mid="<<mid<<endl;
    if(a[mid]==aim )
    return 1;
    }
    return 0;
    }
    int main()
    {
    int i;
    int j;
    int n;
    int aim;
    int num=0;
    cin>>n;
    ///cout<<"n="<<n<<endl;
    input(n);
    sort(n);///输入以及排序OK;01
    memset(b,1,sizeof(b));
    ///cout<<"数组a=";
    ///for(i=1;i<=n;i++)
    ///{
    /// cout<<a[i]<<',';
    /// }
    ///cout<<endl;
    for(i=1;i<=n;i++)
    for(j=i+1;j<=n;j++)
    {
    if(b[j]==0)
    continue;
    aim=a[j]-a[i];
    ///cout<<"aim="<<aim<<endl;
    if((a[i]==aim) ||(aim<a[i]))
    continue;
    else
    {
    if(look(aim,i,j))
    {
    /// cout<<"true"<<endl;
    num++;
    /// cout<<"aim="<<aim<<endl;
    /// cout<<"num="<<num<<endl;
    b[j]=0;
    }
    }

    }

    cout<<num<<endl;
    return 0;
    PS:想得有点麻烦了。。。

  • -1
    @ 2017-11-19 11:36:24

    #include<iostream>
    #include<cstdio>
    using namespace std;
    bool c[100000]={false},ct[100000]={false};
    int in[1000]={0};
    int main()
    {
    int n,ans=0;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
    cin>>in[i];
    c[in[i]]=true;
    }
    for(int i=1;i<=n;i++)
    {
    for(int j=1;j<=n;j++)
    {
    if(j==i)
    {
    continue;
    }
    if(c[in[i]+in[j]]==true)
    {
    ct[in[i]+in[j]]=true;
    }
    }
    }
    for(int i=0;i<100000;i++)
    {
    if(ct[i]==true)
    {
    ans++;
    }
    }
    cout<<ans;
    return 0;
    }

  • -1
    @ 2017-09-09 19:19:07
    //居然错了好几次。。。自己真的是智商下线了lol
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <iostream>
    
    using namespace std;
    
    int n, num[105], revans[100005], cnt;
    
    int main() {
        cin >> n;
        for (int i = 1; i <= n; i++) cin >> num[i];
        for (int i = 1; i <= n; i++) {
            for (int j = i + 1; j <= n; j++) {
                revans[num[i] + num[j]] += 1;
            }
        }
        for (int i = 1; i <= n; i++) {
            cnt += (revans[num[i]] > 0);
        }
        cout << cnt << endl;
        return 0;
    }
    
    

信息

ID
1911
难度
6
分类
(无)
标签
递交数
17193
已通过
4558
通过率
27%
被复制
30
上传者