Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 5 của 5
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    Hãy liệt kê tất cả các số đối xứng có N chữ số và tổng các chữ số đúng bằng S cho trước.

    #include <iostream>
    #include<cmath>
    using namespace std;
    /* run this program using the console pauser or add your own getch, system("pause") or input loop */
    int ktra_chu_so(int k,int n){
    int dem=0;
    int tong=0;
    while(k!=0){
    int du=k%10;
    tong=tong+du;
    dem++;
    k=k/10;
    if(du==0)
    return 0;
    }
    if((tong%10==0)&&(dem==n))
    return 1;
    }
    int ktra_doi_xung(int k,int n){
    int m=n/2;
    int du=k%(pow(10,m));
    for(int i=n/2;i>=0;i--){
    int h=du%10;
    int dao_du=h*pow(10,i);
    du=du/10;
    }
    int nguyen=k/pow(10,m);
    if(dao_du==nguyen)
    return 1;
    }
    int main() {
    int n,k,tong;
    cout<<"nhap k,n:";
    cin>>k>>n;
    if((ktra_chu_so(k,n)==1)&&(ktra_doi_xung(k,n)==1))
    cout<<"yes";
    return 0;
    }
    // a c giúp e với ạ. lỗi ở chỗ hàm ktra đối xứng ạ. vấn đề nằm ở chỗ hàm pow ấy ạ

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Mã:
    #include <iostream>
    #include<cmath>
    using namespace std;
    /* run this program using the console pauser or add your own getch, system("pause") or input loop */
    int ktra_chu_so(int k,int n){
    	int dem=0;
    	int tong=0;
    	while(k!=0){
    		int du=k%10;
    		tong=tong+du;
    		dem++;
    		k=k/10;
    		if(du==0)
    		return 0;
    	}
    	if((tong%10==0)&&(dem==n))
    	return 1;
    }
    int ktra_doi_xung(int k,int n){
    	int m=n/2;
    	int du=k%(pow(10,m));//Hàm pow chỉ dùng được với kiểu double, toán tử % chỉ sử dụng được với số nguyên nên ko tương thích với hàm pow
    	for(int i=n/2;i>=0;i--){
    		int h=du%10;
    		int dao_du=h*pow(10,i);//dao_du đây nằm trong for nên ko sử dụng được ở bên ngoài {}
    		du=du/10;
    	}	
    	int nguyen=k/pow(10,m);
    	if(dao_du==nguyen)//dao_du là biến cục bộ nên không sử dụng được ở bên ngoài dấu {} đâu bạn ạ
    		return 1;
    }
    int main() {
    	int n,k,tong;
    	cout<<"nhap k,n:";
    	cin>>k>>n;
    	if((ktra_chu_so(k,n)==1)&&(ktra_doi_xung(k,n)==1))
    	cout<<"yes";
    	return 0;
    }
    Mình chỉ giúp bạn mấy lỗi thôi cần gì thì liên hệ mail anhdungtpit@gmail.com hoặc facebook: https://www.facebook.com/profile.php?id=100005503931777 mình có thể giúp đỡ thêm

  3. #3
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Chia bài toán trên thành 2 bài toán nhỏ:

    1. Tìm tất cả các số có n/2 chữ số và tổng bằng sum/2 ( với n chẵn)

    2. Tìm tất cả các số có (n - 1)/2 chữ số và có tổng bằng (sum/2 - k) ( với n lẻ, k từ 0 đến 9)

  4. #4
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    em cảm ơn m.n nhiều

    - - - Nội dung đã được cập nhật ngày 28-08-2014 lúc 10:54 PM - - -

    a dungtpit , e tg là trong cùng 1 hàm thì là biến cục bộ mà a, vẫn sd đc chứ a

    - - - Nội dung đã được cập nhật ngày 28-08-2014 lúc 10:59 PM - - -

    có cách nào cải thiện cái hàm ktra_doi_xung cua e k a

    - - - Nội dung đã được cập nhật ngày 28-08-2014 lúc 11:00 PM - - -

    thế này thì bài toán càng phức tạp a ạ

  5. #5
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    ^
    1. Không cần kiểm tra, chỉ cần:
    - Ghép x với đảo của x là ra đối xứng.
    - Ghép x với đảo của x DIV 10 là ra đối xứng.
    2. Phần việc tiếp theo là xử lí cái sum S.
    - Thực hiện sinh x sao cho sum(x) là S/2 (dễ).
    - ...

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •