Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 20 kết quả

Đề tài: Tìm số mà hiệu của nó với tích các chữ số của nó là: Lớn nhất !

  1. #1
    Ngày gia nhập
    09 2012
    Bài viết
    4

    Mặc định Tìm số mà hiệu của nó với tích các chữ số của nó là: Lớn nhất !

    Trong các số có n chữ số (cơ số 10) sao cho giữa chúng không có chữ số 0, tìm số mà hiệu của nó với tích các chữ số của nó là:
    a) Lớn nhất.
    b) Nhỏ nhất.

  2. #2
    Ngày gia nhập
    02 2012
    Nơi ở
    everywhere
    Bài viết
    13

    Trích dẫn Nguyên bản được gửi bởi tuvanduong Xem bài viết
    Trong các số có n chữ số (cơ số 10) sao cho giữa chúng không có chữ số 0, tìm số mà hiệu của nó với tích các chữ số của nó là:
    a) Lớn nhất.
    b) Nhỏ nhất.
    cho 1 dãy số nguyên có n = 3
    3 - 2 -1
    tích = 3*2*1 = 6
    hiệu của 3 số :
    3 : 6-3 = 3
    2 : 6-2 = 4
    1 : 6-1 = 5
    => 1 lớn nhất 3 nhỏ nhất
    => số càng nhỏ ta có hiệu càng lớn , vậy đi tìm số min và max của chuỗi
    còn nếu tính theo kiểu lấy số trong chuỗi - tích thì âm hết bà nó rồi :|
    Code:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <conio.h>
    #include <math.h>
    
    void nhap ( int a[] , int &n)
    {
    	printf("nhap n:");
    	scanf("%d",&n);
    	for ( int i = 0 ; i < n ; i++)
    	{
    		printf("a[%d] :",i+1);
    		scanf("%d",&a[i]);
    	}
    }
    void swap ( int &x , int &y)
    {
    	int temp;
    	if ( x > y)
    	{
    		temp = x;
    		x = y ;
    		y  = temp;
    	}
    }
    void xet ( int a[] , int &n)
    {
    	int tich = 1;
    	for ( int i = 0 ; i < n-1 ; i++)
    	{
    		tich = tich*a[i];
    		for ( int j = i+1 ; j < n ; j++)
    		{
    			if ( a[i] > a[j])
    				swap(a[i] , a[j]);
    		}
    	}
    	printf("max : %d" , a[0]);printf ( "ket qua: %d",tich - a[0]);
    	printf("\nmin : %d",  a[n-1]);printf ( "ket qua: %d",tich - a[n-1]);
    }
    
    void main ()
    {
    	int a[10];
    	int n;
    	nhap(a,n);
    	xet(a,n);
    	getch();
    }

  3. #3
    Ngày gia nhập
    10 2011
    Bài viết
    548

    yokashi có vẻ hiểu sai đề rồi nhỉ
    Đề bảo : Trong tập hợp các số có n chữ số, hãy tìm số nào thỏa tính chất ..."blah blah"...
    Bài này nếu làm kiểu cùi cùi thì nhắm mắt nhắm mũi làm tí là ra, nhưng độ phức tạp quá lớn.

    Bài này dc phân tích toán học ra là thế này:
    x(n) là 1 số có n chữ số đc biểu diễn
    Công thức toán học Latex
    Trong đó
    Công thức toán học Latex
    Khi đó p(x) là tích các chữ số của nó dc biểu diễn như sau
    Công thức toán học Latex

    Vậy bài toán là :
    Tìm x(n) thỏa
    Công thức toán học Latex

    Công thức toán học Latex
    Đã được chỉnh sửa lần cuối bởi clchicken : 24-09-2012 lúc 04:48 PM.
    Um Mani Padme Hum...!!

  4. #4
    Ngày gia nhập
    02 2012
    Nơi ở
    everywhere
    Bài viết
    13

    Trích dẫn Nguyên bản được gửi bởi clchicken Xem bài viết
    yokashi có vẻ hiểu sai đề rồi nhỉ
    Đề bảo : Trong tập hợp các số có n chữ số, hãy tìm số nào thỏa tính chất ..."blah blah"...
    Bài này nếu làm kiểu cùi cùi thì nhắm mắt nhắm mũi làm tí là ra, nhưng độ phức tạp quá lớn.

    Bài này dc phân tích toán học ra là thế này:
    x(n) là 1 số có n chữ số đc biểu diễn
    Công thức toán học Latex
    Trong đó
    Công thức toán học Latex
    Khi đó p(x) là tích các chữ số của nó dc biểu diễn như sau
    Công thức toán học Latex

    Vậy bài toán là :
    Tìm x(n) thỏa
    Công thức toán học Latex

    Công thức toán học Latex
    ..................nghe bác giải thích xong cái hiểu sai kia tịt luôn ,h là ngu hiểu luôn rồi

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

    Ví dụ số có 3 chữ số :
    123
    Thì 123 - 1.2.3 = 123 - 6
    Với số 321
    Thì 321 - 3.2.1 = 321 - 6
    Với số 999
    Thì 999 - 9.9.9 = 999 - 729

    Vậy thì nếu vét cạn thì xét trong tập X3 (tạm gọi là tập các số nguyên có 3 chữ số).
    Ta vét từ 111 đến 999 , sao cho có cái hiệu như vậy là lớn nhất hoặc bé nhất

    Nhưng ta nhận thấy 1 điều : Trong số các số dc sinh từ tập các chữ số giống nhau thì số dc tạo từ sự sắp xếp giảm dần độ lớn các chữ số sẽ có cái hiệu đó là lớn nhất, ngược lại (tăng dần) là bé nhất
    Ví dụ với n =3
    Ta đang xét tập : 1,2,3 thì có các số sau dc sinh ra:
    321 , 312 , 231,213, 132 , 123
    Nhận thấy ngay số 321 có hiệu : 321 - 1.2.3 là lớn nhất , số 123 có hiệu 123-1.2.3 là bé nhất

    Từ đó : Không nhất thiết phải vét cạn. Ta chỉ cần sinh các tổ hợp các chữ số, rồi sau đó sắp xếp các chữ số tăng dần, hoặc giảm dần là tìm được số có hiệu lớn nhất và bé nhất ứng với tổ hợp đó
    => Sinh tất cả các tổ hợp có thể, ứng với mỗi tổ hợp thì tìm 2 số đó . So sánh các số đó tương ứng với nhau, ta ra dc kết quả
    Như vậy sẽ giảm bớt không gian tìm kiếm. (Nhưng mà ko giảm dc độ phức tạp )

    Ví dụ : Với n = 2
    Sinh tổ hợp 1,1 => Tìm số có cái hiệu như thế lớn nhất, số có cái hiệu như thế bé nhất
    Sinh tổ hợp 1,2 => .Tìm như trên , so sánh ...
    Sinh ..........1,3...
    ...
    ..
    Sinh tổ hợp 9,9 => ...
    Cuối cùng dc kết quả
    ___
    Hiện tại độ phức tạp đang ở hàm mũ @@
    Tìm coi có công thức nào tính dc cái min/max đó nhanh chóng ko?
    Hay tìm 1 tính chất nào đó để có thể áp dụng vào, giúp thuật toán giảm bớt độ phức tạp
    Đã được chỉnh sửa lần cuối bởi clchicken : 24-09-2012 lúc 07:12 PM.
    Um Mani Padme Hum...!!

  6. #6
    Ngày gia nhập
    02 2012
    Nơi ở
    everywhere
    Bài viết
    13

    Mặc định Tìm số mà hiệu của nó với tích các chữ số của nó là: Lớn nhất !

    Trích dẫn Nguyên bản được gửi bởi clchicken Xem bài viết
    Ví dụ số có 3 chữ số :
    123
    Thì 123 - 1.2.3 = 123 - 6
    Với số 321
    Thì 321 - 3.2.1 = 321 - 6
    Với số 999
    Thì 999 - 9.9.9 = 999 - 729

    Vậy thì nếu vét cạn thì xét trong tập X3 (tạm gọi là tập các số nguyên có 3 chữ số).
    Ta vét từ 111 đến 999 , sao cho có cái hiệu như vậy là lớn nhất hoặc bé nhất

    Nhưng ta nhận thấy 1 điều : Trong số các số dc sinh từ tập các chữ số giống nhau thì số dc tạo từ sự sắp xếp giảm dần độ lớn các chữ số sẽ có cái hiệu đó là lớn nhất, ngược lại (tăng dần) là bé nhất
    Ví dụ với n =3
    Ta đang xét tập : 1,2,3 thì có các số sau dc sinh ra:
    321 , 312 , 231,213, 132 , 123
    Nhận thấy ngay số 321 có hiệu : 321 - 1.2.3 là lớn nhất , số 123 có hiệu 123-1.2.3 là bé nhất


    Từ đó : Không nhất thiết phải vét cạn. Ta chỉ cần sinh các tổ hợp các chữ số, rồi sau đó sắp xếp các chữ số tăng dần, hoặc giảm dần là tìm được số có hiệu lớn nhất và bé nhất ứng với tổ hợp đó
    => Sinh tất cả các tổ hợp có thể, ứng với mỗi tổ hợp thì tìm 2 số đó . So sánh các số đó tương ứng với nhau, ta ra dc kết quả
    Như vậy sẽ giảm bớt không gian tìm kiếm. (Nhưng mà ko giảm dc độ phức tạp )

    Ví dụ : Với n = 2
    Sinh tổ hợp 1,1 => Tìm số có cái hiệu như thế lớn nhất, số có cái hiệu như thế bé nhất
    Sinh tổ hợp 1,2 => .Tìm như trên , so sánh ...
    Sinh ..........1,3...
    ...
    ..
    Sinh tổ hợp 9,9 => ...
    Cuối cùng dc kết quả
    ___
    Hiện tại độ phức tạp đang ở hàm mũ @@
    Tìm coi có công thức nào tính dc cái min/max đó nhanh chóng ko?
    Hay tìm 1 tính chất nào đó để có thể áp dụng vào, giúp thuật toán giảm bớt độ phức tạp
    đọc tới đây thì hiểu chút @@ , coi phía dưới cứ như rừng ấy @@ , mình đã dở toán rồi coi cái này càng nản T^T
    vậy có nghĩa là ta đi tìm các số có thể đc tạo ra từ 3 số đã cho rồi lấy nó trừ đi tích của 3 số đó và tìm min max đúng ko bác ?

  7. #7
    Ngày gia nhập
    10 2011
    Bài viết
    548

    3 là ví dụ 3 chữ số thôi, còn đề bài là n chữ số lận mà
    Các chữ số ko phải là input , nó hiển nhiên nằm trong tập {1,2,3,4,5,6,7,8,9} rồi

    Bài này:
    input : n (n nguyên dương)
    output: Số có n chữ số sao cho ... ... gì gì đó
    Ví dụ nhập n=2 .
    Chương trình đi vét vét, 11 , 12 ,13 ,14 ,15 , ... 99 coi số nào "có cái đó" lớn nhất/bé nhất
    Nhập n=3
    Chương trình đi vét : 111,112,113,..., 999 coi số nào ...
    Nhập n=4
    ....
    Nhập n = gì gì đó, thì cũng phải tìm cho ra dc

    Nếu bạn chỉ mới đọc phần giải thích màu đỏ đó thì mới chỉ hiểu 1 tí vấn đề thôi, đọc nốt phần màu đen để hiểu thêm
    Đã được chỉnh sửa lần cuối bởi clchicken : 24-09-2012 lúc 08:19 PM.
    Um Mani Padme Hum...!!

  8. #8
    Ngày gia nhập
    02 2012
    Nơi ở
    everywhere
    Bài viết
    13

    Trích dẫn Nguyên bản được gửi bởi clchicken Xem bài viết
    3 là ví dụ 3 chữ số thôi, còn đề bài là n chữ số lận mà
    Các chữ số ko phải là input , nó hiển nhiên nằm trong tập {1,2,3,4,5,6,7,8,9} rồi

    Bài này:
    input : n (n nguyên dương)
    output: Số có n chữ số sao cho ... ... gì gì đó
    Ví dụ nhập n=2 .
    Chương trình đi vét vét, 11 , 12 ,13 ,14 ,15 , ... 99 coi số nào "có cái đó" lớn nhất/bé nhất
    Nhập n=3
    Chương trình đi vét : 111,112,113,..., 999 coi số nào ...
    Nhập n=4
    ....
    Nhập n = gì gì đó, thì cũng phải tìm cho ra dc

    Nếu bạn chỉ mới đọc phần giải thích màu đỏ đó thì mới chỉ hiểu 1 tí vấn đề thôi, đọc nốt phần màu đen để hiểu thêm
    cái cách bác nói nghe bùn cười thật )
    thank bác )

  9. #9
    Ngày gia nhập
    11 2010
    Bài viết
    582

    Nhỏ nhất thì chưa biết nhưng số có n chữ số thỏa mãn điều kiện hiệu lớn nhất sẽ là số 99..90.

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

    Đề bài có nói là chữ số ko dc ==0 mà bác ?
    Um Mani Padme Hum...!!

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

  1. Sửa máy tính, cài đặt windows, phần mềm tại nhà nhanh nhất, rẻ nhất, hiệu quả nhất …
    Gửi bởi hopluccc trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 08-07-2013, 02:07 PM
  2. Trả lời: 12
    Bài viết cuối: 25-10-2012, 02:48 AM
  3. Bài tập C++ NHập mảng một chiều gồm n phần tử kết thúc nhập khi nhập một chữ cái
    Gửi bởi thienthanoze trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 15
    Bài viết cuối: 09-07-2012, 10:10 PM
  4. Bài tập C++ Viết phương trình nhập vào 1 chuỗi số.Hãy nhập vào 1 số.Đếm xem có bao nhiêu chữ số bạn vừa nhập
    Gửi bởi namtuocdn trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 5
    Bài viết cuối: 16-10-2011, 10:39 AM
  5. Bài tập C++ Nhập mảng 1 chiều, nếu phần tử nhập trùng nhau thì bắt nhập lại
    Gửi bởi danielh trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 3
    Bài viết cuối: 09-07-2011, 03:35 PM

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