求助!
查看原帖
求助!
359430
江户川コナン楼主2022/2/4 14:11

请问这个程序怎么错了?

#include<bits/stdc++.h>
using namespace std;
int n,ans=0;
int a[105];
int main(){
    //int n;
    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++){
            for(int k=1;k<=n;k++){
                if(a[k]==a[i]+a[j]){
                    ans++;
                }
            }
        }
    }
    cout<<ans<<endl;
    return 0;
}

第二个点答案是22,但输出是26.

于是我把程序改成了这样:

#include<bits/stdc++.h>
using namespace std;
int n,ans=0;
int a[105];
int main(){
    //int n;
    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++){
            for(int k=1;k<=n;k++){
                if(a[k]==a[i]+a[j]){
                    ans++;
                    cout<<i<<" "<<j<<" "<<k<<endl;
                }
            }
        }
    }
    cout<<ans<<endl;
    return 0;
}

运行后输出

4 16 45
7 63 41
8 10 77
9 61 13
10 49 18
10 99 48
10 100 26
11 81 12
16 46 32
16 89 57
19 64 33
20 31 30
26 87 58
35 38 48
35 57 37
38 73 60
44 92 33
45 53 24
54 83 70
56 82 35
64 74 86
67 83 60
82 85 69
82 93 32
84 98 83
84 100 15
26


然后我写了这样一个程序:

#include <bits/stdc++.h>
using namespace std;
int n,m;
int a[105];
int main(){
    //int n;
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    for(int i=1;i<=m;i++){
        int x,y,z;
        cin>>x>>y>>z;
        if(a[x]+a[y]!=a[z]){
            cout<<i<<" False"<<endl;
        }
    }
    return 0;
}

用意是判断上面那个输出有没有多的,第几个错了就会输出几 False。

于是我输入了:

100 26
6094 106 5958 877 3352 8959 292 9253 3860 448 5709 8295 4667 2588 3663 2486 1129 8870 3126 6203 727 4316 6541 9689 8818 2119 7331 7598 1879 7303 1100 8740 4567 2649 2373 7505 5848 4337 9953 4436 8395 8273 1028 4449 3363 6254 7856 6710 8422 3833 5690 6664 6326 2550 119 2075 3475 9024 3239 8889 807 543 8103 1441 9731 3873 5194 9557 3256 6245 3266 2777 4552 2390 8550 4777 9701 5694 9133 6736 2586 298 3695 1992 2958 3831 6905 8134 989 6292 8967 118 8442 1765 931 4760 5945 1703 6262 1671
4 16 45
7 63 41
8 10 77
9 61 13
10 49 18
10 99 48
10 100 26
11 81 12
16 46 32
16 89 57
19 64 33
20 31 30
26 87 58
35 38 48
35 57 37
38 73 60
44 92 33
45 53 24
54 83 70
56 82 35
64 74 86
67 83 60
82 85 69
82 93 32
84 98 83
84 100 15

结果什么都没输出!

也就是说,上面算出的那26对都是正确的,而且无重复?那为什么答案是22呢?这是怎么一回事?

请大佬们解惑!

2022/2/4 14:11
加载中...