线性方程组
最后化简成
k1 * x1 = a
k2 * x2 = b
如果 k1 = 0 a != 0则无解
如果 k1 = 0 a = 0则无穷解
注意要先判断无解再判断无穷解QWQ
#include<iostream> #include<cstdio> #include<cmath> #include<algorithm> #include<cstring> using namespace std; int n,nowline; double a[11451][11451]; inline int find_pivot( int line , int column ) { //line:行 column:列 int maxn = line; for (int i = line + 1; i <= n; ++i) { if ( a[i][column] > a[maxn][column] ) { maxn = i; } } return maxn; } inline void swap_line( int now , int need ) { //now表示现在这一行 need表示需要的行 for (int i = 1; i <= n + 1; ++i) { swap( a[now][i] , a[need][i] ); } return; } int main() { scanf("%d",&n); for (int i = 1; i <= n; ++i) { for (int j = 1; j <= n + 1; ++j) { scanf("%lf",&a[i][j]); } } for (int q = 1,i = 1; q <= n; ++q) { //i表示第几行 q表示第几列 int pivot = find_pivot( i , q ); //这里一定要注意find时的行与列 QWQ if ( a[pivot][q] == 0 ) continue; //如果此列全为0则先跳过,可以先不用管 swap_line( i , pivot ); for (int j = 1; j <= n; ++j) { if ( j != i ) { double temp = a[j][q] / a[i][q]; for (int k = q;k <= n + 1; ++k) { a[j][k] -= ( a[i][k] * temp ); } } }//正常高斯约旦消元 i ++; nowline = i; } if ( nowline <= n ) { for (int i = nowline; i <= n; ++i) { if ( a[i][n + 1] != 0 ) { //其中有k * x = a; //若 k = 0 a != 0 则无解 输出-1 //若 k = 0 a = 0 则无穷解 输出0 //注意在同时是无解和无穷解的情况下方程组属于无解 printf ("-1\n"); return 0; } } printf ("0\n"); return 0; } for (int i = 1; i <= n; ++i) { a[i][n + 1] /= a[i][i];//除上系数 printf ( "x%d=" , i ); if ( fabs( a[i][n + 1] ) == 0 ) a[i][n + 1] = 0; printf ( "%.2lf\n" , a[i][n + 1] ); } return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!