Kiểm tra 1 số nguyên dương chỉ chứa các chữ số chẵn hoặc chỉ chứa các chữ số lẻ hay không

Viết hàm kiểm tra xem số nguyên dương n (gồm k chữ số - k<20) có chỉ chứa các chữ số chẵn hoặc chỉ chứa các chữ số lẻ hay không

Đầu vào
Đầu vào từ bàn phím gồm T+1 dòng .
Dòng đầu tiên chứa số nguyên T là số lượng số cần kiểm tra;
T dòng tiếp theo, mỗi dòng chứa một số nguyên n.
Đầu ra
In ra màn hình T dòng, mỗi dòng ghi ra “yes” hoặc “no” tương ứng với mỗi số n có thỏa mãn điều kiện không.

#include <iostream>
#include<math.h>
using namespace std;
bool check(int n) {
    while (n > 0) {
        int t = n % 10;
         n /= 10;
    if ( t % 2 == 1)
        return false;
    if ( t % 2== 0)
        return false;
    }    
      return true;
}
int main()
{
    int n;
    do { 
        cin >> n;
    } while (n < 0);
    for (int i=0; i<n; i++){
    if (check(n) == true)
        cout << "yes" << endl;
    else
        cout << "no" << endl;
    }
    return 0;
}

mọi người sửa lỗi giúp mình với.

bị lỗi gì? input như nào?

1 Like

số n có thỏa mãn điều kiện không

Điều kiện gì mới được chứ bạn? :zipper_mouth_face:

2 Likes
if ( t % 2 == 1)
        return false;
    if ( t % 2== 0)
        return false;

Ngay sau khi bạn lấy ra một chữ số (t) từ số (n), bạn kiểm tra tính chẵn lẻ của chữ số này và đưa ra ngay kết luận luôn, vậy thì có chính xác không?

Bạn có thể bắt đầu hàm check bằng cách kiểm tra số (n) có phải là số chẵn hay không.
Nếu (n) là số chẵn, các chữ số còn lại cũng phải là số chẵn. Trong quá trình kiểm tra nếu gặp số lẻ thì đưa ra kết luận là sai ngay.
Nếu (n) là số lẻ, các chữ số còn lại cũng phải là số lẻ. Trong quá trình kiểm tra nếu gặp số chẵn thì đưa ra kết luận là sai ngay.

3 Likes

(gồm k chữ số - k<20)

bool check(int n)

Một số có 19 chữ số đưa vào kiểu int chắc là chứa không đủ :sweat_smile:

2 Likes

Đầu tiên trích lấy 1 chữ số. Tất cả chữ số còn lại phải có cùng tính chẵn lẻ với chữ số này.

Hoặc viết 2 for ứng với 2 trường hợp cũng được.

2 Likes

Trong tất cả các vòng lặp bạn đều kiểm tra chỉ mỗi n mà theo đề bài thì n của bạn chính là T. Bạn kiểm tra T để làm gì??? Sai bước 1.

Trong hàm check, bạn trả về (return) luôn ngay lần lặp thứ nhất => hàm này không thỏa yêu cầu đề bài. Rõ là đề yêu cầu kiểm tra tất cả các chữ số có toàn chẵn hoặc toàn lẻ hay không mà. Tất cả chứ không phải chữ số đầu tiên. Sai luôn bước 2.

Rõ là đề bao gồm nhiều lần nhập giá trị.

  • Dòng đầu là T.
  • T dòng tiếp theo là giá trị số với tối đa 19 (k<20) chữ số.

Tức là có tổng cộng T + 1 dòng. Đoạn mã của bạn chỉ duy nhất 1 lần nhập. Sai luôn bước 0.

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?