Giúp em với,C+ bài tập về mảng 2 chiều

câu 2 chạy tốt rồi nhưng vẫn phải duyệt mảng 2 lần. Có cách nào duyệt 1 lần ko :))
 
PHP:
 void check(int *a,int n)
     {
       int min,d=0,i;

       for (i=0;i<n;i++)
	 if (a[i]>0&&d==0) { d=1;min=a[i];}
	   else if (a[i]>0&&d==1) if (min>a[i]) min=a[i];

       if (d==0) printf("\n Khong tim thay so duong nho nhat.");
       else printf("\n%d la so duong nho nhat.",min);
     }

bài 2 một vòng lặp, lỡ post hai bài nên giờ phải sửa lại. Xin lỗi mod nha :D
 
PHP:
    void check(int *a, int n)
      {
	int i=0,j=1;

	while (a[i]>a[j]) { i++;j++;}
	if (j>n-1) printf("\nDay giam.");
	 else
	 {
	   i=0,j=1;
	   while (a[i]<a[j]) { i++;j++;}
	   if (j>n-1) printf("\nDay tang.");
	     else printf("\nDay BT.");
         }
       }

::) ừ, mình đang dần dần rút kinh nghiệm, cám ơn nhiều nha. Bài 1 mình sửa lại nè. Coi giùm mình với ::)
 
2 bài đều tốt rồi :). Bạn thử làm bài 1 mà chỉ duyệt mảng 1 lần xem, và bài 3 nữa.
 
PHP:
  void check(int *a,int n)
     {
	int i=0,j=1;

	if (a[i]>a[j])
	  {
	    while (a[i]>a[j]) { i++;j++;}
	    if (j>n-1) printf("\nDay giam.");
	       else printf("\nDay binh thuong.");
	  }
	else if (a[i]<a[j])
	  {
	    while (a[i]<a[j]) { i++;j++;}
	    if (j>n-1) printf("\nDay tang.");
	      else printf("\nDay binh thuong.");
	  }
     }

một vòng lặp, ::)

bài 3 mình làm giống bạn MaiVietDung đó ::)

Nếu thấy đúng thì cho mình thêm bài nha, cám ơn nha mình thích cái này rồi :D :x
 
Bài 3 cũng tương đối đơn giản nên mình post code luôn. Bạn chỉ cần chú ý việc ép kiểu khi chia số int cho số int. Mình viết dựa trên code của bạn maivietdung cho nhanh.
PHP:
void Ave(int *a,int n) 
{  
	int sum=0,time=0; 
    for (int i=0;i<n;i++) 
        if (a[i]>0 && a[i]%2!=0) 
        {    sum+=a[i]; 
            time+=1; 
        } 
    float ave=(float)sum/time; 

    printf("\n - Trung binh cong cac so duong trong mang bang: %3f",ave); 
}
 
ừ, vậy kiếm bài mới tiếp nha :D
tối về mình lấy mình làm, thx
:D
 
Bài tập về mảng tiếp tục đây:
Nhập vào một mảng n số nguyên
1) Sắp xếp mảng theo thứ tự tăng dần.
2) Sắp xếp mảng sao cho các số chẳn nằm ở phần đầu mảng, các số lẻ nằm ở phần cuối mảng.
3) Sắp xếp các số chẵn trong mảng theo thứ tự tăng dần, giữ nguyên vị trí các số lẻ.

Vd: mảng a: 5 -3 0 1 -2 4 9
Kết quả:
câu 1: -3 -2 0 1 4 5 9
câu 2: 0 -2 4 9 1 -3 5
câu 3: 5 -3 -2 1 0 4 9
 
PHP:
 void doicho(int &a,int&b)
      {
	int tam;
	tam=a;
	a=b;
	b=tam;
      }

     void check(int *a,int n)
      {
	int i=0,j;
	while (i<n)
	 {
	   j=i+1;
	   while (j<n&&a[i]%2==0)
	     if (a[j]<a[i]&&a[j]%2==0) {doicho(a[i],a[j]);j++;}
	      else j++;
	   i++;
	  }
      }
bài 3 nè ::) nhận xét giùm mình nha, bài 1 và bài 2 chắc để mai quá. Giờ khuya rồi. Mình lại đang xỉn nữa (+.+)
 
bải 3 của bạn chạy tốt rồi . No idea :)).
 
bài 1

PHP:
void check(int *a,int n)
      {
	int i,j;
	for (i=0;i<n-1;i++)
	  for (j=i+1;j<n;j++)
	    if (a[i]%2==0&&a[j]%2==0&&a[i]>a[j]) doicho(a[i],a[j]);
      }

bài 2

PHP:
 void check2(int *a,int n)
      {
	int i,j;
	for (i=0;i<n;i++)
	  for (j=i+1;j<n;j++)
	     if (a[i]%2!=0&&a[j]%2==0) doicho(a[i],a[j]);
      }

bài 3
PHP:
 void check3(int *a,int n)
      {
	int i,j;
	for (i=0;i<n;i++)
	  for (j=i+1;j<n;j++)
	    if (a[i]>a[j]) doicho(a[i],a[j]);
      }

mình đang băn khoăn không biết học về lập trình ở đâu, APTECH hay NIIT :-/

Hồi bữa thi vô APTECH đạt được điểm trung bình hà :'> Mà chưa có học, mấy bạn góp ý mình với

Mấy bài trên nếu thấy được thì cho mình thêm bài nha :D cám ơn nha ::)
 
hôm qua bận quá, ko online được, sorry nha :)
Bài 1 và bài 3 của bạn như vậy là tốt rồi, có nhiều cách khác để làm nhưng bây giờ mình chưa dám bàn vì sợ bạn tẩu hoả nhập ma :)).
Riêng bài 2 bạn thử làm mà chỉ duyệt mảng 1 lần xem.
Còn về việc học lập trình thì mình ko dám ý kiến, vì mình không học qua các lớp đó nên không nhận xét được. Với lại theo mình nghĩ chỗ nào cũng có cái hay của nó, chỉ cần bạn cố gắng học thì sẽ đạt kết quả tốt thôi.
 
PHP:
      void check(int *a,int n)
      {
	int i=0,j=1;
	while (i<n-1&&j<n)
	  if (a[i]%2!=0&&a[j]%2==0) { doicho(a[i],a[j]);i++;j=i+1;}
	  else j++;
      }

một vòng lặp, ::) cho mình bài mới được chưa :D
 
Nice :). Mình cũng làm bài đó nhưng với cách khác, bạn có thể xem qua chơi cho biết.
PHP:
void check(int a[],int n)
{
	int k=n-1;
	for (int i=0;i<k;i++)
	{
		if (a[i]%2!=0)
		{
			doicho(a[i],a[k]);
			k=k-1;
			i=i-1;
		}
	}
}

Bài tập về mảng 1 chiều
Cho 1 mảng 1 chiều gồm n số nguyên.
1) In ra các số nguyên có số lần lặp lại đúng 2 lần trong mảng.
2) Số nào xuất hiện nhiều lần nhất trong mảng.
3) In ra số lần xuất hiện của mỗi phần tử trong mảng.
 
cám ơn anh nha, em đang làm :D anh 24 tuổi rồi hả, ra trường chưa vậy ::)

bài trên của anh kì vậy, hình như anh viết lộn rồi đó :-/ em đọc hoài mà không hiểu :-/

PHP:
     int dem(int *a,int b,int n)
       {
	 int i,d=0;
	 for (i=0;i<n;i++)
	   if (a[b]==a[i]) d++;
	 return d;
       }


      void check(int *a,int n)
       {
	 int i,j=0,max=0;
	 for (i=0;i<n;i++)
	  if (dem(a,i,n)>max) { max=dem(a,i,n);j=i;}

	 printf("\n%d la so do",a[j]);
       }

bai đếm số nào xuất hiện nhiều nhất ::)

bài 3 và bài 1 em dùng thêm 1 mảng nữa được không ::(
 
bài nào viết lộn vậy bạn? Nếu chạy sai thì mình sửa, còn nếu chạy đúng mà bạn đọc không hiểu thì bạn phải chạy từng bước để xem rồi :).
Bài 2 chạy tốt rồi.
Bài 1 và 3 thì bạn làm cách nào cũng được mà, bài toán đâu có điều kiện gì, chỉ cần ra kết quả thôi. Còn việc tối ưu hay không thì do mình thôi.
 
bài nào viết lộn vậy bạn? Nếu chạy sai thì mình sửa, còn nếu chạy đúng mà bạn đọc không hiểu thì bạn phải chạy từng bước để xem rồi :).
Bài 2 chạy tốt rồi.
Bài 1 và 3 thì bạn làm cách nào cũng được mà, bài toán đâu có điều kiện gì, chỉ cần ra kết quả thôi. Còn việc tối ưu hay không thì do mình thôi.

xin lỗi anh, em lộn rồi :'> bài anh chạy đúng mà em nhìn không ra ::) sorry nha :D

bài đếm số xuất hiện hai lần trong mảng ::)

PHP:
       int kiemtra(int *a,int b,int n)
	{
	   int i;
	   for (i=0;i<n;i++)
	      if (b==a[i]) { return 0; }
	   if (b!=a[i-1]) return 1;
	}

       void check(int *a,int n)
	{
	  int i,j=1,*b=new int[j];
	  for (i=0;i<n;i++)
	    if (dem(a,i,n)==2&&kiemtra(b,a[i],n)==1)
	     {
	 b[j-1]=a[i];j++;printf("\n%d So nay xuat hien hai lan",a[i]);
	     }
	//  out (b,j);
	}

bài đếm số lần xuất hiện của mỗi phần tử ::)

PHP:
	void check(int *a,int n)
	 {
	  int i,j=1,*b=new int[j];
	  for (i=0;i<n;i++)
	    if (kiemtra(b,a[i],n)==1)
	     {
	       b[j-1]=a[i];j++;
	       printf("\n%d xuat hien %d lan.",a[i],dem(a,i,n));
	     }
	  out(b,j-1);
	 }
 
cả 2 bài trên bạn chạy thử mảng 1 2 2 3 3 rồi xem kết quả và sửa lại nhé
 
cả 2 bài trên bạn chạy thử mảng 1 2 2 3 3 rồi xem kết quả và sửa lại nhé

anh ơi, bộ trong C sau khi mình gán số vào mảng , thì lần sau nó cũng giữ cái số đó hả anh. ::( Bài em sai ở chỗ đó)


Chạy lần đâu thì good, nhưng đến lân thứ hai trở đi thì không chạy được nữa, do cái mảng b nó giữ các phần tữ ở lần chạy đầu, đem đi so sánh, ::(

Có cách nào làm mảng b như ở lần chạy đầu không vậy anh ?? :-/ ::(
 
Mình có 1 bài như sau:
Nhập sô N,phát sinh ma trận vuông tương ứng.Nhìn vd là bạn rut ra quy luật:D
vd : Nhập n=3,phát sinh ma trận:
1 2 3
8 9 4
7 6 5

Nhập n=4 ,phát sinh ma trận:

1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7​
 
Back
Top