Hướng dẫn giải của Số gấp đôi


Chỉ dùng lời giải này khi không có ý tưởng, và đừng copy-paste code từ lời giải này. Hãy tôn trọng người ra đề và người viết lời giải.
Nộp một lời giải chính thức trước khi tự giải là một hành động có thể bị ban.

Lời giải này đang bị ẩn cho đến khi bạn chọn mở ra.

Chúng tôi khuyên bạn nên tự thử giải bài trước. Việc mở lời giải có thể làm lộ mất ý tưởng chính trước khi bạn có cơ hội tự giải.

Bạn phải đăng nhập để mở lời giải này.

Đăng nhập

Tác giả: Hiếu Nguyễn, Khang2007, PhuTrong37, killergrimgar

Hiểu bài toán

Bài toán yêu cầu nhập một số nguyên a có độ lớn |a| ≤ 100 và in ra số nguyên gấp đôi giá trị của a. Đây là bài toán cơ bản về nhập/xuất và phép nhân đơn giản.

Các cách tiếp cận

Cách Direct Multiplication
#include <stdio.h>
int main(){
    int a;
    scanf("%d",&a);
    printf("%d",2*a);
    return 0;
}
  • Time Complexity: O(1)
  • Space Complexity: O(1)

Đây là cách tiếp cận trực tiếp và đơn giản nhất. Chương trình khai báo biến a kiểu int, đọc giá trị từ input bằng scanf(), tính kết quả là 2a, và in ra bằng printf(). Vì a có giới hạn |a| ≤ 100, kết quả 2a sẽ nằm trong [-200, 200] nên không cần lo lắng về tràn số với kiểu int.

Cách Alternative Variable Naming
#include<stdio.h>
int main(){
    int a;
    scanf("%d",&a);
    printf("%d",a*2);
}
  • Time Complexity: O(1)
  • Space Complexity: O(1)

Cách tiếp cận này tương tự cách đầu tiên, chỉ khác ở thứ tự toán tử (a2 thay vì 2a) và không có return 0 явный nhưng vẫn đúng do hàm main mặc định trả về 0 nếu không có return. Về cơ bản là cùng logic nhân đôi giá trị.

Cách With Extra Headers and Constants
#include <stdio.h>
#include <limits.h>
#include <math.h>
#define Nmax 1e9+7
int main()
{
    int a,n;
    scanf("%d",&n);
    printf("%d",n*2);
    return 0;
}
  • Time Complexity: O(1)
  • Space Complexity: O(1)

Cách tiếp cận này có thêm các thư mục và hằng số không cần thiết (#include <limits.h>, <math.h>, #define Nmax 1e9+7). Biến input được đặt tên là n thay vì a. Dù có nhiều code thừa, logic vẫn là đọc số và in ra gấp đôi.

Phân tích độ phức tạp

Cách tiếp cận Time Space Tên
1 O(1) O(1) Direct Multiplication
2 O(1) O(1) Alternative Variable Naming
3 O(1) O(1) With Extra Headers and Constants

Bài học kinh nghiệm

  • Bài toán chỉ cần sử dụng phép nhân đơn giản 2*a để tính kết quả
  • Độ dài input rất nhỏ (|a| ≤ 100) nên không cần quan tâm đến tràn số

Lỗi thường gặp

  • Quên include thư viện stdio.h cần thiết cho scanf/printf
  • Sai format string trong scanf/printf (ví dụ: dùng %f thay vì %d)

Bình luận

Please read the guidelines before commenting.


Không có bình luận tại thời điểm này.