Trang chủ Tin Học Lớp 10 giải thích hộ mình tại sao code ko chạy đi...

giải thích hộ mình tại sao code ko chạy đi mn, đề bài bảo chia số n thành 2 số a b sao cho a và b gần bằng nahu nhất và ko có số 4 trong đó #include<bits/st

Câu hỏi :

giải thích hộ mình tại sao code ko chạy đi mn, đề bài bảo chia số n thành 2 số a b sao cho a và b gần bằng nahu nhất và ko có số 4 trong đó

#include<bits/stdc++.h>
using namespace std;
long long int a,b,n,i;
string sta,stb;
bool cmp(int a, int b)
{
    sta=to_string(a);
    stb=to_string(b);
    if(sta.find('4')!=string::npos&&stb.find('4')!=string::npos)
        return 0;
    else
        return 1;
}
int main()
{
    cin>>n;
    a=n/2;
    b=n-a;
    while(a+b==n&&a!=0&&b!=0&&cmp(a,b))
        {a--;
        b=n-a;}
    cout<<a<<" "<<b;
}

Lời giải 1 :

- Trong đoạn code trên, có vẻ như lỗi là ở hàm `cmp` và $while$.

$\\$ 

- Giải thích:

+ Hàm `cmp` kiểm tra xem cả hai số có chứa số `4` hay không. Nếu cả hai cùng chứa số `4` thì hàm trả về `0 (false)` ngược lại thì về `1 (true)`. Tuy nhiên, trong đoạn code trên thì chỉ cần một trong hai số có số `4` thì hàm vẫn trả về `1`.

+ Vòng lặp $while$ giảm giá trị của `a` và tăng giá trị của `b` cho đến khi `cmp` trả về `0` nhưng điều kiện 

a+b==n&&a!=0&&b!=0&&cmp(a,b)

không đúng vì nó chỉ dừng khi cả `a` và `b` đều không chứa số `4`, điều này không xảy ra khi `a` hoặc `b` chứa số `4` (Như mình đề cập đoạn `cmp` ở trên).

$\\$ 

- Để sửa lỗi, ta chỉ cần sửa lại logic đoạn `cmp` để hàm chỉ trả về `1` khi cả hai đều không chứa số `4`.

- Cũng cần sửa đoạn $while$ để chương trình dừng lại khi thấy số thỏa mãn.

$\\$ 

Đoạn code tham khảo:

#include<bits/stdc++.h>
using namespace std;
long long int a,b,n,i;
string sta,stb;

bool cmp(int a, int b) {
    sta=to_string(a);
    stb=to_string(b);
    if(sta.find('4')!=string::npos || stb.find('4')!=string::npos)
        return 0; // Trả về false nếu một trong hai số chứa số '4'
    else
        return 1;
}

int main() {
    cin>>n;
    a=n/2;
    b=n-a;
    while(a+b==n && cmp(a,b)==0) { // Chỉ kiểm tra hàm cmp
        a--;
        b=n-a;
    }
    cout<<a<<" "<<b;
}

$\\$

`AduAngQuang`

Bạn có biết?

Tin học là một ngành khoa học chuyên nghiên cứu quá trình tự động hóa việc tổ chức, lưu trữ, xử lý và truyền dẫn thông tin của một hệ thống máy tính cụ thể hoặc trừu tượng. Tin học bao hàm tất cả các nghiên cứu và kỹ thuật có liên quan đến việc mô phỏng, biến đổi và tái tạo thông tin. Hãy tận dụng sức mạnh của tin học để giải quyết các vấn đề và sáng tạo ra những giải pháp mới!

Nguồn :

Wikipedia - Bách khoa toàn thư

Tâm sự lớp 10

Lớp 10 - Năm đầu tiên ở cấp trung học phổ thông, chúng ta sẽ có nhiều bạn bè mới đến từ những nơi khác nhau. Ngôi trường mới, xa nhà hơn, mở ra một thế giới mới với nhiều điều thú vị. Hãy mở lòng đón nhận và tận hưởng những trải nghiệm mới!

Nguồn :

sưu tập

Liên hệ hợp tác hoặc quảng cáo: gmail

Điều khoản dịch vụ

Copyright © 2021 HOCTAPSGK