Sắp xếp chữ số c++

  • Diễn đàn
  • LẬP TRÌNH C++ | LẬP TRÌNH C | LẬP TRÌNH C++0X
  • Thắc mắc lập trình C/C++/C++0x
  • Bài tập C Sắp xếp các chữ số trong n [Ko dùng mảng, chuỗi]]

  1. Sắp xếp các chữ số trong n [Ko dùng mảng, chuỗi]]

    Cho mình hỏi cách giải bài này thế nào với:

    Nhap n; sắp xếp các chữ số trong n theo thứ tự tăng dần ,[ Ko được dùng mảng or chuỗi ]

    vd: n= 3126 ==> 1236

  2. Cái này phải dùng sắp xếp chèn.
    Bạn xác định chữ số ở vị trí nào dựa vào phép chia liên tiếp cho mười, rồi chèn, cái khó là tìm ra vị trí tương ứng với bậc bao nhiêu thôi. Mình ngại code vì trời hơi nóng, thông cảm nha bạn.

    Hi vọng giúp được bạn.

  3. Bạn sử dụng 2 hàm này, rồi sắp xếp như trong mảng xem sao.

    Code:

    #include 
    #include 
    #include 
    
    using namespace std;
    //dao phan tu i, i-1 trong bien n
    // vd m=34787, i=3 => n=34877
    //		54321
    int swap[int n, int i]
    {
    	int m, k, l;	//luu gia tri pt thu i, i+1
    	m = n/[int]pow[[float]10, i-1]%10;	// lay gia tri o phan tu thu i
    	k = n/[int]pow[[float]10, i-2]%10;	// phan tu thu i-1
    	l = n%[[int]pow[[float]10,i-2]];	// cac phan tu sau do
    	n = n/[int]pow[[float]10, i];		// tinh nguoc lai sau khi doi
    	n = n*10+k;
    	n = n*10+m;
    	n = n*[int]pow[[float]10,i-2]+l;
    	return n;
    }
    // >0 neu pt i > pt i-1
    // nguoc lai
    int cmp[int n, int i]
    {
    	int m, k, l;	//luu gia tri pt thu i, i+1
    	m = n/[int]pow[[float]10, i-1]%10;	// lay gia tri o phan tu thu i
    	k = n/[int]pow[[float]10, i-2]%10;	// phan tu thu i-1
    	return m - k;
    }

  4. Một cách giải:

    đọc số [bằng phương pháp %10 và /10], tìm chữ số nhỏ nhất, lưu ý là có thể nhiều hơn một
    ghi ra số mới với số nhỏ nhất này
    tiếp tục đọc số, tìm chữ số nhỏ nhất và lớn hơn chữ số hiện tại.

    Giải thuật này bắt buộc phải chạy vòng lặp nhiều lần

    1. // hàm đọc một số [so], tìm chữ số nhỏ nhất [nn] và lớn hơn một trị [min]

    2. // hàm trả về số lần xuất hiện của chữ số này

    3. int ChuSoNhoNhat[int so, int min, int *nn, int *sl]

    4. {

    5. int cs;

    6. *nn = 10; // min hiện tại: 10 lớn hơn chữ số lớn nhất [9]

    7. *sl = 0; // số lần xuất hiện

    8. while [so > 0]

    9. {

    10. cs = so % 10; // chữ số kế tiếp

    11. if [cs > min]  // chữ số này lớn hơn trị min giới hạn

    12. {

    13. if [cs cs1

    14. {

    15. for [int i = 1; int 00123557 ????

      Cách duy nhất là tính đến đâu, in đến đấy

      Code:

      if [soCuaToi == 0] printf["0"];
      else
      while [ChuSoNhoNhat[soCuaToi, cs1, &cs2, &soLan]]  // nếu trả về số lần == 0, không còn chữ số > cs1
      {
         for [int i = 1; int  00123557 ????

      Cách duy nhất là tính đến đâu, in đến đấy

      Ko có j là ko thể, chỉ là do mình chưa nghĩ ra mà thui! Đùa xí cho vui
      Mình xin đóng góp 1 cách giải quyết thỏa y/c đề bài ko dùng mảng & chuỗi:
      Code như sau [đã test]:

      1. #include

      2. #include

      3. int temp[int n, int index] { return n / index % 10; }

      4. void swap[int &n, int index1, int index2]

      5. {

      6. int temp1 = temp[n, index1];

      7. n = n / [index1 * 10] * [index1 * 10] + temp[n, index2] * index1 + n % index1;

      8. n = n / [index2 * 10] * [index2 * 10] + temp1 * index2 + n % index2;

      9. }

      10. void bubblesort[int &n]

      11. {

      12. int i, j, n1, n2;

      13. for[i = 1, n1 = n; n1 > 10; i *= 10, n1 /= 10]

      14. for[j = i * 10, n2 = n1 / 10; n2 > 0; j *= 10, n2 /= 10]

      15. if[ temp[n, i] n=1326
        - Hàm bubblesort thực hiện việc sắp xếp với thuật toán nổi bọt

  5. Sắp xếp các chữ số trong n [Ko dùng mảng, chuỗi]]

    Nguyên bản được gửi bởi mrvu.mlt

    Ko có j là ko thể, chỉ là do mình chưa nghĩ ra mà thui!
    ...
    void main[]
    {
    int n=3216;
    bubblesort[n];
    cout

Bài Viết Liên Quan

Chủ Đề