- Nếu ý tưởng bạn đúng rồi:"Dùng mảng 2 chiều thì chứ theo ý tưởng đó mà làm"...làm mấy cái hàm giai thừa, tổ hợp làm jì cho khổ?
Công thức truy hồi:
C[1][j] = 1
C[i][j] = C[i-1][j-1] + C[i-1][j]; (với 1<= i,j <= n);
Mình sẽ vẽ 1 tam giác Pascal sử dụng mãng 2 chiều, chương trình mình đã làm như thế này , nhưng ko chạy đc, nhờ các bạn chỉ lỗi dùm:
Hy vọng các bạn giúp đỡ!Code:#include<iostream.h> int giaithua(); int tohop(); void vetamgiac(); int main() { int tg[10][10]; for(int i=0;i<10;i++) for(int j=0;j<10;j++) { tg[i][j]=tohop(i,j); } return 0; } void vetamgiac() { for(int i=0;i<10;i++) for(int j=0;j<=i;j++) { cout<<tg[i][j]<<" "; } } int giaithua(int n) { int t=1; for(int i=1;i<=n;i++) t*=i; return (t); } int tohop(int k,int n) { int t2=1; t2= giaithua(n)/(giaithua(k)*giaithua(n-k)); return t2; }
- Nếu ý tưởng bạn đúng rồi:"Dùng mảng 2 chiều thì chứ theo ý tưởng đó mà làm"...làm mấy cái hàm giai thừa, tổ hợp làm jì cho khổ?
Công thức truy hồi:
C[1][j] = 1
C[i][j] = C[i-1][j-1] + C[i-1][j]; (với 1<= i,j <= n);
No way, No success..
Bài này mình đã làm 1 lầnCode:#include <stdio.h> #include <conio.h> void main() { int n,hang,cot; int a[14][14]={0}; do { printf("Nhap chieu cao tam giac pascal (2<=n<=13): "); scanf("%d",&n); } while(n<2 || n>13); for(hang=1;hang<=n;hang++) { for(cot=1;cot<=n;cot++) { if(cot==1) a[hang][cot]=1; else a[hang][cot]=0; } } for(hang=2;hang<=n;hang++) for(cot=1;cot<=n;cot++) if(cot!=1) a[hang][cot]=a[hang-1][cot]+a[hang-1][cot-1]; printf("\n"); for(hang=1;hang<=n;hang++) { for(cot=1;cot<=n;cot++) if(a[hang][cot]!=0) printf("%-6d",a[hang][cot]); printf("\n"); } getch(); }
bây giờ minh code lại cho bạn xem thử
ý tưởng là như sau
đầu tiên bạn tạo ra 1 mảng 2 chiều với các phần tử của mảng đều bằng 0
sau đó dùng kỹ thuật của bạn gán cho tất cả những hàng có cột bằng 1 là số 1 hết
tức là sau khi gán ý đồ của bạn sẻ có như thế này
nhìn lên cái ý đồ của mình bản sẻ thấy có 1 quy luật như sauCode:1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
nếu như cột khác 1(tức là ko xét cột 1) thì
a[hang][cot]=a[hang-1][cot]+a[hang-1][cot-1];
cái này hàng ta xét từ 2 trở đi
cứ như vậy ta sẻ gán các giá trị tương ứng cho mảng
sau đó mình xuất ra các giá trị của mảng
xuất ra các phần tử của mảng khác 0 là ok
tuy nhiên cách làm này ko hay . nhưng đó là 1 cách làm sài mảng
mình ko hiểu cái code của bạn
tuy nhiên mình thấy bạn sai nhiều cái rất quan trọng
có thể vì vậy mà code bạn ko chạy
cái này phải làCode:#include<iostream.h>dưới nó phải khai báoCode:#include <iostream>Code:using namespace std;cái này của bạn thiếu tham số đầu vàoCode:void vetamgiac() { for(int i=0;i<10;i++) for(int j=0;j<=i;j++) { cout<<tg[i][j]<<" "; } }
phải là void vetamgiac(int tg[][10]) chứ bạn
cả 3 cái trên cùng này cũng sai
bạn phải khai báo nguyên mẩu hàm chứCode:int giaithua(); int tohop(); void vetamgiac();
nếu không khai báo nguyên mẩu hàm thì nó lấy dữ liệu từ đâu để sữ lý nhỉ
còn nữa
trong hàm main của bạn chỉ gán các giá trị cho mảng
bạn có hàm vetamgiac tuy nhiên bạn lại không khai báo lại hàm này trong main
nên dù hàm vẻ tam giác của bạn có đúng thì 1000 năm sau nó cũng ko in ra cái tam giác pascal cho bạn đâu
của bạn còn mấy lổi nữa
bạn tự kiểm tra lại nhé
híc...cái này là thư viện của C++ không có .h thì sao mở được đâyCode:#include<iostream.h>
đâu có
mình sài vc++2006
thấy bỏ iostream.h là lổi liền
code này chạy okCode:#include <iostream> using namespace std; void main() { cout<<"hic hic"; }
cái này là báo lổiCode:#include <iostream.h> using namespace std; void main() { cout<<"hic hic"; }
ko biết do mình hay do trình biên dịch nữa