đế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. 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óa

Đă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ố

Chuyển đơn vị đo nhiệt độ C và F

Tìm số đẹp (lộc phát)