Đánh giá, nhận xét, review các công ty tuyển dụng
Trang 3 trên tổng số 3 Đầu tiênĐầu tiên 123
Từ 21 tới 27 trên tổng số 27 kết quả

Đề tài: Tìm ƯCLN & BCNN của số tự nhiên

  1. #21
    Ngày gia nhập
    07 2010
    Nơi ở
    chỗ kín
    Bài viết
    446

    Mặc định Tìm ƯCLN & BCNN của số tự nhiên

    Trích dẫn Nguyên bản được gửi bởi mrrrthengoc Xem bài viết
    bai hoan chinh ne!!!!!!!!!!

    #include<iostream>
    #include<conio>
    #define max(a,b) (a>b?a:b)
    void main ()
    {
    int a,b,n,m,ucln,ucnn;
    -
    std::cout<<"nhap vao a ";
    std::cin>>a;
    std::cout<<"nhap vao b ";
    std::cin>>b;

    n=a;
    m=b;

    while(n!=m)
    {
    if(n>m)
    n-=m;
    else
    m-=n;
    }
    ucln=n;

    if(n>1)
    bcnn=ucln*max(a,b);
    else
    bcnn=a*b;

    std::cout<<"ucln cua a va b la "<<ucln<<std::endl;
    std::cout<<"bcnn cua a va b la "<<bcnn<<std::endl;
    getch();

    }
    chả thấy cool đâu, thấy mỗi fool thôi, đề bảo tìm n số cơ mà.

  2. #22
    Ngày gia nhập
    02 2011
    Bài viết
    21

    Tớ mới code xong,mọi người check nhá:
    *> Ý tưởng: Để tìm UCLN của 1 dãy ta tìm UCLN của 2 số.
    *> Giả sử cần tìm UCLN của dãy gồm: a1,a2,a3,a4,a....an
    Ta tìm trunggian=UCLN(a1,a2) sau đó tìm tiếp trunggian=UCLN(trunggian,a3)....Cuối cùng thu được UCLN của cả dãy.
    OK từ ý tưởng trên t code như sau:(Mọi người test thử)
    PHP Code:
    /*
     * UCLN.cpp
     *
     *  Created on: Feb 11, 2011
     *      Author: khangphamngoc
     */
    #include <iostream>
    using namespace std;
    void nhap(int *a,int n){
        
    int i;
        for(
    i=1;i<=n;i++)
        {
            
    cout<<"\nMoi ban nhap phan tu thu "<<i<<":";
            
    cin>>a[i];
        }
    }
    int UCLN(int a,int b){
        if(
    b==0)return a;
        return 
    UCLN(b,a%b);
    }
    int UCLN_Day(int *a,int n){
        if(
    n==1)return a[1];
        
    int tg=UCLN(a[1],a[2]);
        for(
    int i=3;i<=n;i++){
            
    tg=UCLN(tg,a[i]);
        }
        return 
    tg;
    }
    int main(){
        
    int *a,n;
        
    cout<<"\nMoi ban nhap so phan tu cua day:";
        
    cin>>n;
        
    a=new int[n+1];
        
    nhap(a,n);
        
    cout<<"\nUCLN cua day tim duoc la:"<<UCLN_Day(a,n);
        return 
    0;

    Good luck!

  3. #23
    Ngày gia nhập
    08 2010
    Bài viết
    76

    Các bác dùng đệ quy có lẽ hơi khó hiểu cho bạn này. Tớ đề xuất một thuật toán khác nhá.
    Code:
    int USC(int a, int b)
    {
    while(a!=b)
    if(a>b) a-=b;
    else b-=a;
    return a;
    }
    Thuật toán như thế này:
    Input: 2 số a, b nguyên dương
    Output: USCLN của a, b
    Method:
    B1: Nếu a==b thì USCLN là a, kết thúc. Nếu a!=b thì B2
    B2: Nếu a>b thì a=a-b, B1
    Nếu a<b thì b=b-a, B1

  4. #24
    Ngày gia nhập
    06 2008
    Bài viết
    54

    Thấy mọi người làm vui quá G cũng góp thêm phần code của mình.

    C++ Code:
    1. #include <stdio.h>
    2. #include <stdlib.h>
    3.  
    4. int UCLN(int a, int b){
    5.     int max = a;
    6.     int min = b;
    7.     /*
    8.         Cách này thì không cần biến temp;
    9.         max = (a > b)? a : b;
    10.         min = (a < b)? a : b;
    11.     */
    12.     int temp;
    13.     if(max < min){
    14.         temp = max;
    15.         max = min;
    16.         min = temp;
    17.     }
    18.  
    19.     int remainder;
    20.     do{
    21.         remainder = max%min;
    22.         max = min;
    23.         min = remainder;
    24.     }
    25.     while(remainder != 0);
    26.     return max;
    27. }
    28.  
    29. int main(){
    30.     printf("%d", UCLN(287, 91));
    31.     return 0;
    32. }

    G sử dụng giải thuật Euclid. Nó cũng giống như các giải thuật của các bạn nhưng nó sử dụng phép chia để rút ngắn cách tính toán.

    Ví dụ: 287 và 91

    Khi tính toán ta sẽ lấy số lớn nhất chia cho số nhỏ nhất:
    287 = 91*3 + 14
    Sau khi chia ta thấy 287 % 91 có dư là 14. Ta sẽ lấy 91 & 14 tìm xem nó có Ước chung nào khác không.
    91 = 14*6 + 7
    Ta lại tiếp tục tìm UCLN của 14 & 7 (vì còn số dư là 7):
    14 = 7*2
    Bài toán không còn số dư nữa. Ta sẽ được 7 là UCLN của 91 & 287.

    Giải thuật Euclid: http://vi.wikipedia.org/wiki/Gi%E1%B...%BA%ADt_Euclid

    Lấy số Max chia cho số Min. Nếu không có dư thì Min chính là UCLN.

    Nếu có dư thì gán Max = Min, Min = số dư và tiếp tục tìm UCLN(Max, Min) (Quay lại bước 1)
    Khi bạn nào hiểu rồi. Chúng ta có thể biến bài toán mình ngắn hơn bằng Đệ Quy:

    C++ Code:
    1. int UCLN(int a, int b){
    2.     int max = (a > b)? a : b;
    3.     int min = (a < b)? a : b;
    4.     int remainder = max%min;
    5.     return (remainder == 0)? min : UCLN(min, remainder);
    6. }
    7.  
    8. int main(){
    9.     printf("%d", UCLN(287, 91));
    10.     return 0;
    11. }

    Khi tìm UCLN của dãy số ví dụ:

    287, 91, 14, 3,...

    Cách làm:

    Tìm UCLN(287, 91) = 7.

    Sau đó, ta lấy tìm UCLN(7, 14) = 7.

    Tiếp UCLN (7, 3) = 1,...
    (Lưu ý UCLN bằng 1 thì break là được rồi.)

  5. #25
    Ngày gia nhập
    10 2011
    Bài viết
    2

    Trích dẫn Nguyên bản được gửi bởi º┴¶† HACK †¶┴º Xem bài viết
    Code:
    #include<stdio.h>
    #include<conio.h>
    #include<math.h>
    int ucln(int a,int b)
    {
    	if(b=0) return a;
    		return ucln(b,a%b);
    }
    main()
    {
      int a[10],i,n,uc,bc;
    	printf("n= ");scanf("%d",&n);
    	for(i=0;i<n;i++){
    		printf("a[%d]= ",i);scanf("%d",&a[i]);
    	}
    	uc=ucln(a[0],a[1]);
    	
    	for(i=2;i<n;i++) uc=ucln(uc,a[i]);
    	printf("UCLN = %d",uc);
      getch();
    }
    cái dòng đỏ là cái gì thế trời :|, kô hiểu 1 cái gì cả (lần đầu tui cũng mới thấy "b=0" , sửa lại chỗ đó thế này là ok nè
    Code:
    int ucln(int a,int b)
    {
    	if(a == b) 
    		return b;
    	if (a > b)
    		return ucln (a - b, b);
    	return ucln(a, b - a);
    }
    , mới "lon ton" vào C++ nên viết thử = C++ thử cho quen
    Code:
    #include<iostream>
    
    using std::cout;
    using std::cin;
    
    int ucln(int a,int b)
    {
    	if(a == b) 
    		return b;
    	if (a > b)
    		return ucln (a - b, b);
    	return ucln(a, b - a);
    }
    void main()
    {
    	int a[10],i,n,uc,bc;
    	cout << "n= ";
    	cin >> n;
    	for(i=0;i<n;i++){
    		cout << "Nhap so thu "<<i+1<<":";
    		cin >> a[i];
    	}
    	uc=ucln(a[0],a[1]);
    	
    	for(i=2;i<n;i++) {
    		uc=ucln(uc,a[i]);
    	}
    	cout << "UCLN = "<<uc<<"";
    }
    ăn nhiều wa' coi chừng béo ú đấy nhé
    Neu doan client cua to la
    cout << UCLN(8, 0);
    sao no lai khong chay nhi cac ban.

  6. #26
    Ngày gia nhập
    11 2011
    Nơi ở
    C:\Windows
    Bài viết
    2

    Mặc định Tìm ƯCLN & BCNN của số tự nhiên

    Sao mình làm thế này
    Code:
    #include "stdafx.h"
    #include <conio.h>
    #include <stdio.h>
    void nhap(int a[],int n);
    void xuat(int a[],int n);
    int ucln(int a,int b);
    void ucd(int a[],int &n);
    void main()
    {
    	int a[10],n,i,j,uc;
    	//int x,k;
    	printf("nhap n:");
    	scanf("%d",&n);
    	printf("\nNHap mang duong\n");
    	nhap(a,n);
    
    	/*uc = ucln(a[0],a[1]);
        for (i = 2; i < n; i++)
    	if (uc == 1) break;
    	else uc = ucln(uc,a[i]);
    	printf("\nucln cua cac pt duong trong mang la %d",uc);  */
    
    	ucd(a,n); printf("\nucln cua cac pt duong trong mang la "); xuat(a,n);
    
    	getch();
    }
    
    void nhap(int a[],int n)
    {
    	int i;
    	for (i=0;i<n;i++)
    	{
    		printf("\npt[%d]:",i);
    		scanf("%d",&a[i]);
    	}
    }
    void xuat(int a[],int n)
    {
    	int i;
    	for (i=0;i<n;i++)
    		printf("%3d",a[i]);
    }
    
    int ucln(int a,int b)
    {
    	
    	do
    	{
    		if(a>b)a=a-b;
    		else b=b-a;
    	}
    	while(a!=b);
    	return a;
    }
    void ucd(int a[],int &n)
    {
    	int i,j; 
    	do
    	{
    		for(i=0,j=-1;i<n-1;i+=2)
    		{
    			j++;
    			a[j]=ucln(a[i],a[i+1]);
    		}
    		if((n%2)!=0)
    		{
    			a[j+1]=a[n-1];
    			n=(n+1)/2;
    		}
    		else n=n/2;
    	}
    	while(n!=1);
    
    }
    ...khi dãy có hơn 4 ptu (n>4) thì tim ucln không ra. Mấy bạn xem giúp nhe!!

  7. #27
    Ngày gia nhập
    09 2012
    Bài viết
    2

    TKs. thaut toan nay hay

Các đề tài tương tự

  1. Bài tập C Tìm UCLN và BCNN của n số nguyên dương.
    Gửi bởi conrongchautien trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 16
    Bài viết cuối: 24-05-2011, 01:27 PM
  2. Kỹ thuật C++ Tính BCNN rồi tìm UCLN như thế nào???
    Gửi bởi BlackDiam0nd trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 17
    Bài viết cuối: 21-12-2010, 08:05 AM
  3. Bài tập C++ cách sử dụng hàm in ra các số tự nhiên chẵn trong n số tự nhiên đầu tiên
    Gửi bởi tictic trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 17-04-2010, 01:17 PM
  4. Sửa giúp code Tìm BCNN của dãy số
    Gửi bởi mori trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 2
    Bài viết cuối: 19-03-2009, 12:24 AM
  5. Tìm BCNN bằng đệ quy ?
    Gửi bởi tun_tun trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 9
    Bài viết cuối: 21-04-2008, 12:10 AM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn