c语言最简单的abc之间的运算,高手请进,请教一道简单的c语言题!

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

#include 

#include 

#include 

#include 

#include 

#include 

using namespace std;

ifstream fin("alpha.in");

ofstream fout("alpha.out");

#define cin fin

#define cout fout

int nn;

///

//LUP 解线性方程组

//by kicc

///

//index start from 1

const int N=30;

int aa[N][2*N];

int ans [N];

void printaa(){

int i,j;

for(i=0;i

for(j=0;j<2*nn;j++)cout<

cout<

}

cout<

}

int gcd(int a,int b){

return b==0?a:gcd(b,a%b);

}

void simple(int k){

int p=0,i;

for(i=0;i<2*nn;i++)p=gcd(p,aa[k][i]);

for(i=0;i<2*nn;i++)aa[k][i]/=p;

}

void LUP(){

int i,j,k,k1;

for(i=0;i

//printaa();

for(k=0;k

for(i=k;i

if(aa[i][k]!=0){

k1=i;

break;

}

}

assert(i!=nn);

for(i=0;i<2*nn;i++)

std::swap(aa[k][i],aa[k1][i]);

for(i=k+1;i

if(aa[i][k]==0)continue;

int b=aa[i][k];

for(j=k;j<2*nn;j++)

aa[i][j]=aa[i][j]*aa[k][k]-b*aa[k][j];

simple(i);

}

//printaa();

}

for(k=nn-1;k>=0;k--){

for(i=0;i

if(aa[i][k]==0)continue;

int b=aa[i][k];

for(j=0;j<2*nn;j++)

aa[i][j]=aa[i][j]*aa[k][k]-b*aa[k][j];

simple(i);

}

//printaa();

}

//printaa();

}

int bb[N];

int used[N];

void solveequ(){

int i,j,sum;

for(i=0;i

for(i=0;i

sum=0;

for(j=0;j

if(sum%aa[i][i]!=0)return;

int p=sum/aa[i][i];

if(p<0||p>=nn||used[p])return;

used[p]=1;

ans[i]=p;

}

for(i=0;i

cout<

if(i!=nn-1)cout<

else cout<

}

}

char equ[3][N];

void setaa(){

//printaa();

int i,j;

for(i=0;i

aa[i][equ[0][i]-'A']++;

aa[i][equ[1][i]-'A']++;

aa[i][equ[2][i]-'A']--;

}

//printaa();

}

void input(){

cin>>nn;

assert(1<=nn&&nn<=26);

cin>>equ[0]>>equ[1]>>equ[2];

assert(strlen(equ[0])==nn);

assert(strlen(equ[1])==nn);

assert(strlen(equ[2])==nn);

int i,j;

bool c[26];

for(i=0;i<26;i++)c[i]=false;

for(i=0;i<3;i++){

for(j=0;j

}

for(i=0;i

for(i=nn;i<26;i++)assert(c[i]==false);

}

void solve(){

int i,j,k;

setaa();

LUP();

int ss=1<

int b[30];

for(i=0;i

for(j=0;j

if(i&(1<

else b[j]=0;

}

b[nn-1]=0;

for(j=0;j

if(j==0)bb[nn-1-j]=nn*b[j];

else bb[nn-1-j]=nn*b[j]-b[j-1];

}

solveequ();

}

}

int main(){

input();

solve();

return 0;

}

这个是C++源码…�

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值