wa了整天,變換著姿勢終於找到錯了。。
1.模擬過程,字串的處理,字串裡包含數字,()括號,字母,數字注意是負數,會坑你爹的
一開始注意到了負數,以為處理了,但是沒處理好,沒有在讀取整個負數後才乘以-1,所以錯了
2.高斯消元過程,出現undefined是因為出現了 a=a 這樣的式子,也就是有自由變數
注意乙個變數a的undefined可能導致另一變數b的undefined,只要b的式子包含a,這樣令我wa不止,
我注意到了,以為處理了,,可是又沒處理好。。
可以如下,正常消元過程後,回代的時候判斷代入的是不是undefined,和對應的check
void gauss()
if(fabs(a[i][i])=i;--j)
a[k][j]-=a[k][i]/a[i][i]*a[i][j];
}for(int i=n-1;i>=0;--i) // 包含有undefined的字母的式子也會變成undefined
else if(fabs(a[i][k])>eps)
a[i][n]/=a[i][i];
}}inline bool check(int x)
也可以如下,每次對當前行之外的全部式子消元,如果都有解的話,最終得到的矩陣是除了對角線,其他entry都是0
其他entry有不是0的,或者,a[i][i]的位置是0 ,說明undefined
void gauss()
if(fabs(a[row][col])eps)
return false;
}return (fabs(a[x][x])>eps);
}
最終**:c++能過,g++wa。不解。
#include #include #include #include #include #include #include #include #include #include using namespace std;
#define eps 1e-9
double a[30][30];
char s[10000];
int n;
// - num ( ) char
void cal(int pos,int st,int ed,int now) // s[st]=='('
else
else if(s[i]==')')
block--;
else if(block==1 && s[i]>='a' && s[i]<='z')
p++;}}
prenum=false;block=0;
now*=p;
int num,nest_st,nest_ed,mark;
for(int i=st;i<=ed;++i)
else
num=num*10+s[i]-'0';
}else
if(s[i]=='(')
else if(s[i]==')')
}else if(block==1 && s[i]>='a' && s[i]<='z')}}
}void gauss()
if(fabs(a[i][i])=i;--j)
a[k][j]-=a[k][i]/a[i][i]*a[i][j];
}for(int i=n-1;i>=0;--i) // 包含有undefined的字母的式子也會變成undefined
else if(fabs(a[i][k])>eps)
a[i][n]/=a[i][i];
}}inline bool check(int x)
int main ()
{ int ncase=1;
while(scanf("%d",&n)!=eof)
{if(n==0 ) break;
memset(a,0,sizeof(a));
char ch;
int st,ed,block;
for(int i=0;i
poj 1222 (高斯消元)
1 高斯消元法求解 適用於01方矩陣的問題,不適用在解線性方程組中 首先介紹一下怎樣用高斯消元法解題!這個遊戲的名字叫做lights out。乙個板子上面有mxn個按鈕,按鈕也是燈。每次按下乙個按鈕,這個按鈕和它的上下左右相鄰按鈕將同時切換各自的亮滅狀態。給你乙個初始狀態,請給出一種方法,按某些按鈕...
poj 1830 高斯消元
include include include include include include include include include includeusing namespace std typedef vectorvi typedef vectorvvi typedef vectorvv...
poj 1222 高斯消元
第一次寫高斯消元 題意很簡單 就是是全部燈變暗,一盞燈開關會使周圍的燈變化,初始狀態給了。每盞燈就是乙個x a就是相關關係 就是求 ax b 的解 自己寫的模版有點搓,可以去別的文章去看看 優美點的 include include include include include using name...