作者Cidolfas ()
看板C_and_CPP
標題[問題] 新手問C語言序列(array)問題
時間Sun Aug 1 23:30:16 2010
遇到的問題: (題意請描述清楚)
我想做一個陣列,此陣列各對應的元素值為 pow(i,M)+pow(j,M)
i為列位置,j為行位置,且此陣列只做下三角與對角線部分。
然後比較各陣列元素的值,若一樣就挑出來。
我在一開始製作陣列就出問題了...
希望得到的正確結果:
i j (i,j)
1 1 2
2 1 5
2 2 8
3 1 10
3 2 13
3 3 18
4 1 17
4 2 20
4 3 25
4 4 32
.....
程式跑出來的錯誤結果:
能成功編譯,但數值部份怪怪的。當 N=4 時會變成
i j (i,j)
1 1 2
2 1 5
2 2 8
3 1 10
3 2 13
3 3 18
4 1 17
4 20 1
下面就沒出現了。
而 N=4 若改成3數值是正確的,但改成其他的正整數又會出錯。
開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux)
Dev-C++
有問題的code: (請善用置底文標色功能)
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define N
4
#define M 2
main()
{
int i, j, sum[N][N];
for (i=1; i<=N; ++i){
for (j=1; j<=i; ++j){
sum[i][j]=pow(i,M)+pow(j,M);
printf("%5d\t%5d\t%5d\n",i,j,sum[i][j]);
}
}
system("pause");
return 0;
}
補充說明:
順便請教一下,若是用 C 想找出一個矩陣中哪些位置的元素是相同的,
是不是要寫 4 個迴圈去找呢?
ex. A[5][6]
for(int i=1; i<5; ++i)
for(int j=1; j<6; ++j)
for(int k=1; k<5; ++k)
for(int l=1; l<6; ++l)
if (A[i][j]==A[k][l] && i!=k)
printf("%d\t%d\t%d\t%d\t%d\n", i, j, k, l);
還是有其他更好的方式?多謝指教!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 219.85.174.70
推 VictorTom:你的陣列存取爆了, int arr[10] 只有 arr[0] ~ arr[9]能 08/01 23:34
→ VictorTom:用, 陣列存取爆了寫到其他記憶體空間就天曉得會怎樣了@@ 08/01 23:35
→ Cidolfas:請問那應該怎麼設?還有為何N=2也錯,但N=3會對?謝謝 08/01 23:37
→ VictorTom:小弟我覺得我寫給你看的例子應該已經能解決你的第一個問 08/01 23:38
→ VictorTom:題了喔, 請你自己再想想; 會對可能只是運氣好而已.... 08/01 23:38
→ Cidolfas:謝謝,我在想想怎麼做 08/01 23:45