đếm In Xâu Nhị Phân (dùng Thuật Toán Sinh )

Chuyển đến nội dung chính

đếm in xâu nhị phân (dùng thuật toán sinh )

Đề bài: Một xâu nhị phân độ dài n được gọi là thuận nghịch hay đối xứng nếu đảo ngược xâu nhị phân đó ta vẫn nhận được chính nó. Cho số tự nhiên n (n nhập từ bàn phím). Hãy viết chương trình liệt kê tất cả các xâu nhị phân thuận nghịch có độ dài n. Các xâu nhị phân tìm được ghi lại trong file ketqua.out theo khuôn dạng: ·Dòng đầu tiên ghi lại số K là số các xâu thuận nghịch có độ dài n tìm được; ·K dòng kế tiếp ghi lại mỗi dòng một xâu nhị phân thuận nghịch có độ dài n. Hai phần tử khác nhau của xâu thuận nghịch được ghi cách nhau một vài khoảng trống. Ví dụ với n = 4 ta tìm được 4 xâu nhị phân thuận nghịch như dưới đây. ketqua.out 4 0 0 0 0 0 1 1 0 1 0 0 1 1 1 1 1 giải: #include<iostream> #include<iomanip> using namespace std; void xuat( int a[], int n){ for(int i = 0; i < n; i++) cout << setw(5) << a[i]; cout << endl; } void sinh( int a[], int n, int &ok){ int i = n-1; while( i >= 0 && a[i] == 1){ a[i] = 0; i--; } if( i >= 0){ a[i] = 1; } else ok = 0; } int ktmang(int a[100], int n) { int i = 0; int j = n - 1; while( i < n/2) { if(a[i] != a[j]) return 0; i++; j--; } return 1; } void sinhlientuc(int a[], int n, int ok, int kq[1000][100], int &demKq){ while(ok){ if(ktmang(a, n)){ for(int i = 0; i < n; i++) kq[demKq][i] = a[i]; demKq++; } sinh(a,n,ok); } } void inKetqua(int kq[1000][100], int demKq, int n){ cout << demKq<<endl; for(int i = 0; i < demKq; i++){ for(int j = 0; j < n; j++) cout << setw(2) << kq[i][j]; cout << endl; } } int main(){ int n; int ok=1; int a[100] = {}; int kq[1000][100]; int demKq = 0; cin >> n; sinhlientuc(a, n, ok, kq, demKq); inKetqua(kq, demKq, n); }

Nhận xét

  1. Nặc danhlúc 22:15 4 tháng 2, 2023

    anh ơi cho em xem lưu đồ thuật toán với em không hiểu anh viết gì cả

    Trả lờiXóaTrả lời
      Trả lời
Thêm nhận xétTải thêm...

Đăng nhận xét

Bài đăng phổ biến từ blog này

Đổi chỗ chữ số đầu tiên và chữ số cuối cùng của một số

Đ ề bài: Viết chương trình C cho phép nhập vào một số nguyên n và thực hiện đổi vị trí của chữ cái đầu tiên và chữ cái cuối cùng. Lưu ý trong trường hợp chữ số cuối cùng là 0 thì khi đổi chỗ sẽ được loại bỏ (ví dụ 9800 -> 809) INPUT 1234 OUTPUT 4321 Giải: #include<iostream> using namespace std; int n; int a[ 100 ]; void doivtri() { int i = 0 ; while (n > 0 ) { a[i] = n % 10 ; n = n / 10 ; i ++ ; } if ( a[ 0 ] != 0 ) cout << a[ 0 ]; for ( int j = i - 2 ; j >= 1 ; j -- ) cout << a[j]; cout << a[i - 1 ]; } int main() { cin >> n; doivtri(); } Đọc thêm

Số đẹp tăng giảm

Đề bài: Một số được gọi là số tăng giảm nếu số đó có các chữ số thỏa mãn hoặc tăng dần, hoặc giảm dần từ trái qua phải. Hãy đếm các số  nguyên tố  là số  tăng giảm với số  chữ  số  cho trước INPUT 2 O UTPUT 20 Giải bài: #include<iostream> #include<cmath> using namespace std; int n; bool nto ( int x) { if (x < 2 ) return false ; for ( int i = 2 ; i <= sqrt(x); i ++ ) if (x % i == 0 ) return false ; return true ; } //1234 -> 4, 123, 3 < 4 bool tang ( int x) { int t = x % 10 ; x /= 10 ; while (x > 0 ) { if (t <= x % 10 ) return false ; t = x % 10 ; x /= 10 ; } return true ; } bool giam ( int x) { int t = x % 10 ; x /= 10 ; while (x > 0 ) { if (t >= x % 10 ) return false ; t = x % 10 ; x /= 10 ; } return true ; } void tanggiam () { cin >> n; int dem = 0 ; for ( int i = pow( 10 , n - 1 ); i < pow( 10 , n); i ++ ) {... Đọc thêm

Tìm số Strong trong khoảng cho trước

Đề bài : Viết chương trình cho phép nhập vào hai số nguyên dương và tìm tất cả các số Strong (là số có tổng giai thừa các chữ số bằng chính nó) nằm trong khoảng đó (nếu không tồn tại số nào thì in ra 0) INPUT 1 1000 OUTPUT 1 2 145 Giải : #include<iostream> using namespace std; int n,m; void input () { cin >> n; cin >> m; } int giaithua( int n) { int t = 1 ; for ( int i = 1 ; i <= n; i ++ ) { t = t * i; } return t; } int tong( int n) { int tong = 0 ; int m = n; while (n > 0 ) { int t = n % 10 ; tong = tong + giaithua(t); n = n / 10 ; } if (tong == m) return 1 ; else return 0 ; } int main() { input (); if (n <= m) { for ( int i = n; i <= m; i ++ ) { if (tong(i)) cout << i << " " ; } } else { for ( int i = m; i <= n; i ++ ) { if (tong(i)) cout << i << " " ; } } return 0 ; } Đọc thêm

Blog Archive

  • 2018 16
    • tháng 4 7
    • tháng 3 9
      • sắp xếp chèn ( Insertion sort )
      • sắp xếp chọn ( selection sort)
      • đếm in xâu nhị phân (dùng thuật toán sinh )
      • sử dụng quay lui in số thỏa mãn các điều kiện
      • sử dụng giải thuật sinh sinh số thập phân thỏa mãn...
      • Là số nguyên tố, từng số là nguyên tố, tổng, tích ...
      • là số nguyên tố, mỗi chữ số là nguyên tố, tổng là ...
      • Là nguyên tố đảo ngược là ngto, tổng các chữ số là...
      • là sô nguyên tố, là số thuận nghịch, chuyển cơ số ...
  • 2017 29
    • tháng 8 28
    • tháng 7 1
  • 2015 5
    • tháng 9 5
Hiện thêm

Nhãn

  • Lập trình C
  • Lập trình C++
  • Lập trình Java

Báo cáo vi phạm

Từ khóa » đếm Số Xâu Palindrome Có độ Dài N