アットウィキロゴ

xdslp

class pro{

int mlong,nlong,ms,ns,nx;
double[][] a=new double[100][100];
double[] b=new double[100];

public static void main(String[] args) {
pro test=new pro();
}

pro(){

mlong=2;
nlong=4;

a[0][1]=5;
a[0][2]=1;

a[1][1]=1;
a[1][2]=5;
a[2][1]=1;
a[2][2]=7;
a[1][3]=1;
a[2][4]=1;
b[1]=10;
b[2]=50;

ns=seekn();

while(ns>0){
ns=seekn();
ms=0;
if(ns>0)ms=seekm(ns);
if(ms>0)cal(ms,ns);
}


for(nx=1;nx<nlong+1;nx++){
System.out.println(sol(nx));
}

}


double sol(int nx){
int mx,h,num,mxs;
double s1;
num=0;
mxs=0;
for(mx=0;mx<mlong+1;mx++){
h=0;
if(a[mx][nx]>0.00001)h=100;
if(a[mx][nx]<-0.00001)h=100;
if(h>50)num=num+1;
if(h>50)mxs=mx;
}
s1=0;
if(num==1)s1=b[mxs]/a[mxs][nx];
return s1;
}

void cal(int ms,int ns){
double z;
int mx,nx;
for(mx=0;mx<mlong+1;mx++){
z=a[mx][ns]/a[ms][ns];
if(mx==ms)z=0;
for(nx=1;nx<nlong+1;nx++){
a[mx][nx]=a[mx][nx]-z*a[ms][nx];
}
b[mx]=b[mx]-z*b[ms];
}

}

int seekm(int ns){
int mx,mxs,h;
double minm,a1,q;
minm=99999;
mxs=0;
for(mx=1;mx<mlong+1;mx++){
h=0;
a1=a[mx][ns];
if(a1>0)h=h+1;
if(a1==0)a1=1;
q=b[mx]/a1;
if(q<minm)h=h+1;
if(q<0)h=0;
if(h==2)mxs=mx;
if(h==2)minm=q;
}
return mxs;
}
int seekn(){
int nx,nxs;
double maxn;
maxn=0;
nxs=0;
for(nx=1;nx<nlong+1;nx++){
if(a[0][nx]>maxn)nxs=nx;
if(a[0][nx]>maxn)maxn=a[0][nx];
}
return nxs;
}


}
最終更新:2011年08月25日 03:25