1 条题解

  • 0
    @ 2024-12-24 9:59:27

    C++ :

    #include<stdio.h>
    #include<string.h>
    
    
    int n;
    int s[10][10];
    
    int main()
    {
       // freopen("1.txt","r",stdin);
       // freopen("2.txt","w",stdout);
        while(~scanf("%d",&n))
        {
            for(int i=0;i<n;i++)
                for(int j=0;j<n;j++)
                    scanf("%d",&s[i][j]);
    
            long long mul=1;
            for(int i=0;i<n;i++)
            {
                if(s[i][i]==0)
                {
                    int tag=1;
                    for(int j=i+1;j<n;j++)
                    {
                        if(s[j][i]!=0)
                        {
                            for(int k=0;k<n;k++)
                            {
                                int t=s[i][k];
                                s[i][k]=s[j][k];
                                s[j][k]=t;
                            }
                            tag=0;
                            break;
                        }
                    }
                    if(tag) continue;
                    mul*=-1;//½»»»Á½ÐÐ,·ûºÅ±äºÅ
                }
    
                for(int j=i+1;j<n;j++)
                {
                    if(s[j][i]!=0)
                    {
                        long long Lcm=s[i][i]*s[j][i];
                        long long a=Lcm/s[i][i];
                        long long b=Lcm/s[j][i];
                        mul*=b;
                        for(int k=0;k<n;k++)    //  | k*aij | == k*| aij |
                        {
                            s[j][k]*=b;
                        }
                        for(int k=i;k<n;k++)
                        {
                            s[j][k]-=s[i][k]*a;
                        }
                    }
                }
      /*         for(int ii=0;ii<n;ii++)
                {
                    for(int jj=0;jj<n;jj++)
                    {
                        printf("%d ",s[ii][jj]);
                    }printf("\n");
              }*/
    
            }
    
            long long ans=1;
            for(int i=0;i<n;i++)
                ans*=s[i][i];
            printf("%lld\n",ans/mul);
        }
    }
    

    Java :

    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.math.BigInteger;
    import java.util.*;
    
    public class Main{
        public static long gcd(long a,long b){
            if(b==0)    return a;
            return gcd(b,a%b);
        }
        public static long lcm(long a,long b){
            return a/gcd(a,b)*b;
        }
        public static void main(String args[]){
            Scanner cin=new Scanner(System.in);
            long x[][]=new long[10][10];
            int n;
            while(cin.hasNext()){
                n=cin.nextInt();
                for(int i=1;i<=n;i++)
                    for(int j=1;j<=n;j++)
                        x[i][j]=cin.nextLong();
                long tmp,p,q;
                long ans=1,cnt=1;
                for(int i=1;i<n;i++){
                    if(x[i][i]==0){
                        ans*=-1;
                        boolean ok=false;
                        for(int j=i+1;j<=n;j++){
                            if(x[j][i]!=0){
                                ok=true;
                                for(int k=1;k<=n;k++){
                                    tmp=x[i][k];
                                    x[i][k]=x[j][k];
                                    x[j][k]=tmp;
                                }
                            }
                            if(ok)
                                break;
                        }
                    }
                    ans*=x[i][i];
                    for(int j=i+1;j<=n;j++){
                        if(x[j][i]==0)
                        {
                            continue;
                        }
                        //tmp=lcm(x[j][i],x[i][i]);
                        tmp=x[j][i]*x[i][i];
                        p=tmp/x[j][i];
                        q=tmp/x[i][i];
    
                        for(int k=i;k<=n;k++)
                            x[j][k]=x[j][k]*p-q*x[i][k];
                        cnt*=p;
                    }
                }
                /*for(int ii=1;ii<=n;ii++){
                    for(int jj=1;jj<=n;jj++)
                        System.out.print(x[ii][jj]+" ");
                    System.out.println();
                } */
                ans*=x[n][n];
                System.out.println(ans/cnt);
            }
        }
    }
    
    • 1

    信息

    ID
    1530
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者