第一次写显示有一个测试点错误,后来改进了算法,但是感觉和第二个没啥区别,为啥第一个有一个测试点错误,第二个正确呢?

img


#include<iostream>
using namespace std;
int main(){
    int N;
    cin>>N;
    int a[N];
    for(int i=0;i<N;i++){
        cin>>a[i];
    }
    int x=1;
    for(int i=1;i<=N;i++){
        x=x*i;
    }
    int b[x];
    int s=0;
    int e=0;
    for(int m=0;m<N;m++){
            for(int n=0;n<N;n++){
                if(m==n){
                    continue;
                }
                else{
                b[e]=a[m]*10+a[n];
                e++;}        }
        }
    for(int i=0;i<x;i++){
        s=s+b[i];
    }
    cout<<s;
}
#include<cstdio>
int main(){
    int n;
    int sum=0;
    scanf("%d",&n);
    int a[n];
    for(int i=0;i<n;i++){
        scanf("%d",&a[i]);
    }
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            if(i!=j){
                sum+=a[i]*10+a[j];
            }
        }
    }
    printf("%d",sum);
}

第一段代码里:

    int x=1;
    for(int i=1;i<=N;i++){
        x=x*i;
    }
    int b[x];

是计算 N!,N!很快就超出 int 型的范围了。