If statements (câu lệnh if)

Chào mọi người, em muốn hỏi lệnh if trong đoạn code sau có ý nghĩa như thế nào ạ:

int thi(unsigned int n) {
    int s=0,i;
    for (i=1;i<n;i++) if (!(n%i)) s=s+i; // Đoạn này
    return n==s;
}

Bạn có biết nó dùng trong trường hợp nào không?

3 Likes

Đoạn code này dùng để kiểm tra n có phải là số hoàn hảo hay không ạ.

Trong C/C++ và nhiều ngôn ngữ khác, 0 tương đương với false và 1 tương đương với true, thành ra !0 = !false = true. If ở trên chỉ đơn giản là nếu n chia i dư 0 nhưng viết theo kiểu đánh đố, tối nghĩa hơn.

4 Likes

Mọi người cho mình hỏi tí.
Mình có chạy riêng đoạn code mà để đưa ra 1 số random

    srand (time(NULL));
    int a = rand() % 100+1;
    cout <<a<<endl;

thì thấy rằng: tuy số là random nhưng có xu hướng tăng từ nhỏ đến lớn. Tăng đến ngưỡng 100 thì số mới lại quay về mức thấp.
Nếu như vậy thì ko thực sự random lắm.

Mong mọi người giải thích ạ

Mình cảm ơn

Tất cả các hàm thực hiện việc tạo ngẫu nhiên 1 số đều dùng 1 công thức toán dựa vào số seed bạn đầu. Bởi vậy, nó thực sự không ngẫu nhiên mà theo một tuần tư nhất định, để số có thể gọi là ngẫu nhiên thì nên thêm thời gian vào.
Bạn thử chạy đoạn mã sau nhiều lần:


Đoạn 1: kết quả các lần chạy đều giống nhau.
Đoạn 2: kết quả các lần chạy khác nhau, nhưng vẫn có điểm tương đồng và theo quy luật nào đó (công thức mà).
Đoạn 3: ngẫu nhiên hoàn toàn. Vì phụ thuộc thời gian hoàn toàn.

4 Likes

Mình đã hiểu phần nào.
Cảm ơn bạn nhiều ạ.

1 Like

cho em hỏi thế khi mình dùng là if (n % i) biết n = 5 và i = 1 thì nó trả về đúng hay sai ạ

cho em hỏi là muốn dùng if not thì phải làm sao ạ

@Quyet_Phan_Ngoc
Lệnh phủ định trong hầu hết các ngôn ngữ là dấu chấm than (!). Chắc chắn bạn đã học qua rồi, bạn đã quên hoặc không còn nhớ.

if(!done){
    print("Not done!")
}
3 Likes

Góp vui với anh em

#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;

int main() {
	srand(time(0));
	cout << "A random number has been created" << endl;
        int randomNum = rand() % (100 - 0 + 1);
	int guessNum;
	cout << "Guess the number :0 is less than 50, 1 is bigger than 50" << endl;
	cin >> guessNum;
	cout <<"random num is : " << randomNum << endl;
	if ((randomNum >= 50 && guessNum == 1) || (randomNum <= 50 && guessNum == 0))
	{
		cout << "Correct bro" << endl;
	}
	else
	{
		cout << "Wrong bro" << endl;
	};
	system("pause");
	return 0;
}
1 Like

Giải bài if-else không cần if:

#include <random>
#include <iostream>
#include <compare>
#include <memory>

#define let const auto
#define lеt auto

template<class T>
let read = [](std::istream& is=std::cin){T r; is >> r; return r;};

template <class F, class T>
decltype(auto) operator&&(T&& t, F&& f){return f(std::forward<T>(t));}

int main()
{
    lеt make_a_number = std::mt19937{std::random_device{}()};
    lеt must_between_0_and_100 = std::uniform_int_distribution<>{0, 100};

    let me = make_a_number and must_between_0_and_100;
    let you = 50;

    let hope = std::strong_ordering::less;

    let need = me <=> you == hope;

    let the_world = need ^! read<int>();
    let of = {"Right", "Wrong"};

    std::cout << *std::next(begin (of), the_world) << "! "
              << "The number is " << me << " "
              << "("
              << me
              << need ["><"]
              << you
              << ")"
              << std::endl;
}

Demo: Wandbox

1 Like

cho mình hỏi tác dụng của đoạn code :
srand(time(NULL));
int random=rand()%101;
là gì ạ

https://cplusplus.com/reference/cstdlib/srand/
void srand (unsigned int seed);
=> Initialize random number generator

Có một thuật toán để sinh ra những số ngẫu nhiên, bắt đầu với một seed nào đó. Thông thường người ta truyền vào tham số seed giá trị là thời gian hiện tại bằng hàm time(), để không biết seed sẽ là bao nhiêu luôn.

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