FAQ


Hướng dẫn giải bài toán A + B - C

Bài toán yêu cầu:

  • Nhập 3 số nguyên a, b, c
  • Tính và in ra kết quả của phép tính a + b - c

Input:

  • Dòng một: Một số nguyên a
  • Dòng hai: Hai số nguyên b và c, cách nhau bởi một dấu cách.
  • -10 ≤ a, b, c ≤ 10

Output:

  • Một số nguyên duy nhất là kết quả của phép tính a + b - c

C

#include <stdio.h>

int main() {
    int a, b, c;

    // Nhập dữ liệu
    scanf("%d", &a);
    scanf("%d %d", &b, &c);

    // Tính toán và in kết quả
    printf("%d\n", a + b - c);

    return 0;
}

C11

#include <stdio.h>

int main(void) {
    int a, b, c;

    // Nhập dữ liệu
    scanf("%d", &a);
    scanf("%d %d", &b, &c);

    // Tính toán và in kết quả
    printf("%d\n", a + b - c);

    return 0;
}

Clang

#include <stdio.h>

int main(void) {
    int a, b, c;

    // Nhập dữ liệu
    scanf("%d", &a);
    scanf("%d %d", &b, &c);

    // Tính toán và in kết quả
    printf("%d\n", a + b - c);

    return 0;
}

Clang++

#include <iostream>
using namespace std;

int main() {
    int a, b, c;

    // Nhập dữ liệu
    cin >> a;
    cin >> b >> c;

    // Tính toán và in kết quả
    cout << a + b - c << endl;

    return 0;
}

C++

#include <iostream>
using namespace std;

int main() {
    int a, b, c;

    // Nhập dữ liệu
    cin >> a;
    cin >> b >> c;

    // Tính toán và in kết quả
    cout << a + b - c << endl;

    return 0;
}

C++03

#include <iostream>
using namespace std;

int main() {
    int a, b, c;

    // Nhập dữ liệu
    cin >> a;
    cin >> b >> c;

    // Tính toán và in kết quả
    cout << a + b - c << endl;

    return 0;
}

C++11

#include <iostream>
using namespace std;

int main() {
    int a, b, c;

    // Nhập dữ liệu
    cin >> a;
    cin >> b >> c;

    // Tính toán và in kết quả
    cout << a + b - c << endl;

    return 0;
}

C++14

#include <iostream>
using namespace std;

int main() {
    int a, b, c;

    // Nhập dữ liệu
    cin >> a;
    cin >> b >> c;

    // Tính toán và in kết quả
    cout << a + b - c << endl;

    return 0;
}

C++17

#include <iostream>
using namespace std;

int main() {
    int a, b, c;

    // Nhập dữ liệu
    cin >> a;
    cin >> b >> c;

    // Tính toán và in kết quả
    cout << a + b - c << endl;

    return 0;
}

C++20

#include <iostream>
using namespace std;

int main() {
    int a, b, c;

    // Nhập dữ liệu
    cin >> a;
    cin >> b >> c;

    // Tính toán và in kết quả
    cout << a + b - c << endl;

    return 0;
}

C++ (Themis)

#include <iostream>
using namespace std;

int main() {
    int a, b, c;

    // Nhập dữ liệu
    cin >> a;
    cin >> b >> c;

    // Tính toán và in kết quả
    cout << a + b - c;

    return 0;
}

Python 3

# Nhập dữ liệu
a = int(input())
b, c = map(int, input().split())

# Tính toán và in kết quả
print(a + b - c)

Python 2

# Nhập dữ liệu
a = int(raw_input())
b, c = map(int, raw_input().split())

# Tính toán và in kết quả
print a + b - c

PyPy 2

# Nhập dữ liệu
a = int(raw_input())
b, c = map(int, raw_input().split())

# Tính toán và in kết quả
print a + b - c

PyPy 3

# Nhập dữ liệu
a = int(input())
b, c = map(int, input().split())

# Tính toán và in kết quả
print(a + b - c)

Java

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        // Nhập dữ liệu
        int a = scanner.nextInt();
        int b = scanner.nextInt();
        int c = scanner.nextInt();

        // Tính toán và in kết quả
        System.out.println(a + b - c);

        scanner.close();
    }
}

Java 8

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        // Nhập dữ liệu
        int a = scanner.nextInt();
        int b = scanner.nextInt();
        int c = scanner.nextInt();

        // Tính toán và in kết quả
        System.out.println(a + b - c);

        scanner.close();
    }
}

JavaScript (Node.js)

const readline = require('readline');
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});

let lines = [];
rl.on('line', (line) => {
    lines.push(line);
    if (lines.length === 2) {
        const a = parseInt(lines[0]);
        const [b, c] = lines[1].split(' ').map(Number);

        console.log(a + b - c);
        rl.close();
    }
});

V8 JavaScript

// Giả định rằng đầu vào được cung cấp qua readline
var a = parseInt(readline());
var bc = readline().split(' ').map(Number);
var b = bc[0];
var c = bc[1];

// Tính toán và in kết quả
print(a + b - c);

Go

package main

import "fmt"

func main() {
    var a, b, c int

    // Nhập dữ liệu
    fmt.Scan(&a)
    fmt.Scan(&b, &c)

    // Tính toán và in kết quả
    fmt.Println(a + b - c)
}

Ruby

# Nhập dữ liệu
a = gets.to_i
b, c = gets.split.map(&:to_i)

# Tính toán và in kết quả
puts a + b - c

Rust

use std::io;

fn main() {
    let mut input = String::new();

    // Nhập số a
    io::stdin().read_line(&mut input).unwrap();
    let a: i32 = input.trim().parse().unwrap();

    // Nhập số b và c
    input.clear();
    io::stdin().read_line(&mut input).unwrap();
    let parts: Vec<i32> = input
        .trim()
        .split_whitespace()
        .map(|s| s.parse().unwrap())
        .collect();

    let b = parts[0];
    let c = parts[1];

    // Tính toán và in kết quả
    println!("{}", a + b - c);
}

C

using System;

class Program {
    static void Main() {
        // Nhập dữ liệu
        int a = int.Parse(Console.ReadLine());
        string[] tokens = Console.ReadLine().Split();
        int b = int.Parse(tokens[0]);
        int c = int.Parse(tokens[1]);

        // Tính toán và in kết quả
        Console.WriteLine(a + b - c);
    }
}

PHP

<?php
// Nhập dữ liệu
$a = (int)trim(fgets(STDIN));
list($b, $c) = array_map('intval', explode(' ', trim(fgets(STDIN))));

// Tính toán và in kết quả
echo ($a + $b - $c) . "\n";
?>

Pascal

program APlusMinusC;
var
    a, b, c: integer;
begin
    // Nhập dữ liệu
    readln(a);
    readln(b, c);

    // Tính toán và in kết quả
    writeln(a + b - c);
end.

Kotlin

fun main() {
    // Nhập dữ liệu
    val a = readLine()!!.toInt()
    val (b, c) = readLine()!!.split(" ").map { it.toInt() }

    // Tính toán và in kết quả
    println(a + b - c)
}

Swift

import Foundation

// Nhập dữ liệu
let a = Int(readLine()!)!
let bc = readLine()!.split(separator: " ").map { Int($0)! }
let b = bc[0]
let c = bc[1]

// Tính toán và in kết quả
print(a + b - c)

Lua

-- Nhập dữ liệu
local a = tonumber(io.read())
local b, c = io.read():match("(%d+)%s+(%d+)")
b, c = tonumber(b), tonumber(c)

-- Tính toán và in kết quả
print(a + b - c)

Dart

import 'dart:io';

void main() {
  // Nhập dữ liệu
  int a = int.parse(stdin.readLineSync()!);
  var bc = stdin.readLineSync()!.split(' ');
  int b = int.parse(bc[0]);
  int c = int.parse(bc[1]);

  // Tính toán và in kết quả
  print(a + b - c);
}

F

open System

// Nhập dữ liệu
let a = Console.ReadLine() |> int
let bc = Console.ReadLine().Split() |> Array.map int
let b = bc.[0]
let c = bc.[1]

// Tính toán và in kết quả
printfn "%d" (a + b - c)

Visual Basic

Imports System

Module Program
    Sub Main()
        ' Nhập dữ liệu
        Dim a As Integer = Integer.Parse(Console.ReadLine())
        Dim tokens As String() = Console.ReadLine().Split()
        Dim b As Integer = Integer.Parse(tokens(0))
        Dim c As Integer = Integer.Parse(tokens(1))

        ' Tính toán và in kết quả
        Console.WriteLine(a + b - c)
    End Sub
End Module

Scala

object Main {
  def main(args: Array[String]): Unit = {
    // Nhập dữ liệu
    val a = scala.io.StdIn.readInt()
    val Array(b, c) = scala.io.StdIn.readLine().split(" ").map(_.toInt)

    // Tính toán và in kết quả
    println(a + b - c)
  }
}

Objective-C

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        int a, b, c;
        char buffer[100];

        // Nhập số a
        fgets(buffer, sizeof(buffer), stdin);
        a = atoi(buffer);

        // Nhập số b và c
        fgets(buffer, sizeof(buffer), stdin);
        sscanf(buffer, "%d %d", &b, &c);

        // Tính toán và in kết quả
        NSLog(@"%d", a + b - c);
    }
    return 0;
}

Assembly (x86)

section .data
    format_in db "%d", 0
    format_in2 db "%d %d", 0
    format_out db "%d", 10, 0

section .bss
    a resd 1
    b resd 1
    c resd 1

section .text
    global main
    extern scanf, printf

main:
    ; Nhập số a
    push a
    push format_in
    call scanf
    add esp, 8

    ; Nhập số b và c
    push c
    push b
    push format_in2
    call scanf
    add esp, 12

    ; Tính a + b - c
    mov eax, [a]
    add eax, [b]
    sub eax, [c]

    ; In kết quả
    push eax
    push format_out
    call printf
    add esp, 8

    ; Kết thúc chương trình
    xor eax, eax
    ret

Assembly (x64)

section .data
    format_in db "%d", 0
    format_in2 db "%d %d", 0
    format_out db "%d", 10, 0

section .bss
    a resd 1
    b resd 1
    c resd 1

section .text
    global main
    extern scanf, printf

main:
    ; Lưu các thanh ghi
    push rbp
    mov rbp, rsp

    ; Nhập số a
    lea rdi, [format_in]
    lea rsi, [a]
    xor rax, rax
    call scanf

    ; Nhập số b và c
    lea rdi, [format_in2]
    lea rsi, [b]
    lea rdx, [c]
    xor rax, rax
    call scanf

    ; Tính a + b - c
    mov eax, [a]
    add eax, [b]
    sub eax, [c]

    ; In kết quả
    lea rdi, [format_out]
    mov rsi, rax
    xor rax, rax
    call printf

    ; Kết thúc chương trình
    xor rax, rax
    leave
    ret

NASM

section .data
    format_in db "%d", 0
    format_in2 db "%d %d", 0
    format_out db "%d", 10, 0

section .bss
    a resd 1
    b resd 1
    c resd 1

section .text
    global main
    extern scanf, printf

main:
    ; Nhập số a
    push a
    push format_in
    call scanf
    add esp, 8

    ; Nhập số b và c
    push c
    push b
    push format_in2
    call scanf
    add esp, 12

    ; Tính a + b - c
    mov eax, [a]
    add eax, [b]
    sub eax, [c]

    ; In kết quả
    push eax
    push format_out
    call printf
    add esp, 8

    ; Kết thúc chương trình
    xor eax, eax
    ret

NASM64

section .data
    format_in db "%d", 0
    format_in2 db "%d %d", 0
    format_out db "%d", 10, 0

section .bss
    a resd 1
    b resd 1
    c resd 1

section .text
    global main
    extern scanf, printf

main:
    ; Lưu các thanh ghi
    push rbp
    mov rbp, rsp

    ; Nhập số a
    lea rdi, [format_in]
    lea rsi, [a]
    xor rax, rax
    call scanf

    ; Nhập số b và c
    lea rdi, [format_in2]
    lea rsi, [b]
    lea rdx, [c]
    xor rax, rax
    call scanf

    ; Tính a + b - c
    mov eax, [a]
    add eax, [b]
    sub eax, [c]

    ; In kết quả
    lea rdi, [format_out]
    mov rsi, rax
    xor rax, rax
    call printf

    ; Kết thúc chương trình
    xor rax, rax
    leave
    ret

Hướng dẫn nộp bài bằng ngôn ngữ Scratch

Thay vì nộp code như đa số các ngôn ngữ khác, bạn cần nộp file .sb3 đối với Scratch.

  1. Ở trang đề bài, nhấn vào nút "Gửi bài giải" ở góc trên bên phải:

  2. Chọn ngôn ngữ Scratch:

  3. Khung code sẽ thay đổi để cho phép nộp file:

Các lưu ý khi làm bài bằng Scratch
Nhập dữ liệu

Nhập dữ liệu bằng block Ask () and Wait. Mặc định mỗi block này sẽ nhập một dòng từ luồng vào chuẩn. Ví dụ với dữ liệu đầu vào:

1 2
3 4

sẽ được chuyển thành hai dòng 1 23 4, tương ứng với hai block Ask () and Wait.

Để nhập theo token (ví dụ trên tương ứng với bốn token 1, 2, 3, 4), đặt câu hỏi của block Ask () and Wait thành read_token. Xem ví dụ ở cuối trang để hiểu thêm.

Xuất dữ liệu

Dùng block Say () hoặc Think () để xuất ra luồng ra chuẩn. Hai block này có sự khác biệt nhỏ:

  • Say () xuất dữ liệu kèm dấu xuống dòng (\n)
  • Think () chỉ xuất dữ liệu, không xuất dấu xuống dòng (\n)
Ví dụ với bài A + B - C

Kết quả nộp bài

Kết quả nộp bài sẽ trả cho bạn một thông tin gọi lại là Status Code - là một mã ngắn thể hiện thông tin về bài nộp của bạn, hiện tại có những mã sau đây:

Code Giải thích
AC - Accepted Chương trình đã chạy đúng với toàn bộ test của đề bài.
WA - Wrong Answer Chương trình đưa ra output không giống với output chuẩn.
RTE - Runtime Exception Thường biết với cái tên Runtime Error. Chương trình sinh lỗi và trả về một giá trị khác 0 và lỗi này đa số chỉ xuất hiện khi bạn dùng ngôn ngữ như C hoặc C++. Các bạn có thể xem ở link này về một số lỗi RTE thường xuất hiện.
IR - Invalid Return Chương trình trả về một giá trị khác 0, cũng giống RTE, nhưng nó thường xuất hiện ở các ngôn ngữ Python hoặc Java khi bạn xử lý ngoại lệ (exception).
OLE - Output Limit Exceeded Chương trình in ra quá nhiều thông in ra output (thường giới hạn là 256MB).
MLE - Memory Limit Exceeded Chương trình dùng quá nhiều bộ nhớ. Đôi khi lỗi này sẽ gây ra RTE thay vì MLE.
TLE - Time Limit Exceeded Chương trình chạy quá thời gian quy định.
IE - Internal Error Lỗi hệ thống. Lỗi này có thể do bài tập chưa được cấu hình đúng, hoặc do lỗi ở máy chấm. Nếu bạn thấy lỗi này, bạn có thể thử nộp lại bài tập của mình, nếu vẫn không được thì bạn có thể liên hệ với admin hoặc người ra đề.

Phản hồi từ trình chấm

Lưu ý
  1. Trình chấm coi một token là một từ, ngăn cách bởi 1 hoặc nhiều khoảng trắng (spaces).

  2. Dấu cách thừa không ảnh hưởng đến kết quả chấm bài (trừ trường hợp đề bài có nêu rõ không cho phép khoảng trắng thừa.)

Giải thích thông điệp
  • Participant's output contains extra tokens

    • Giải thích: Kết quả của bạn có số lượng token nhiều hơn kết quả đúng. Ví dụ output chỉ là 2 4 nhưng code của bạn cho ra 2 4 6
  • Unexpected EOF in the participant's output

    • Giải thích: Trình chấm gặp EOF khi chưa kiểm tra xong, có thể do kết quả của bạn có số token ít hơn số token của kết quả đúng.

Cách tính điểm làm bài trên 300bàicode.vn.

Chúng tôi sử dụng mã nguồn do team VNOI phát triển, do đó cách tính điểm (performance points) cũng sử dụng hệ thống tính điểm giống VNOJ, bạn có thể xem hệ chi tiết cách tính điểm đang được áp dụng tại đây, phiên bản gốc tại đây.

Làm sao để đổi màu tài khoản?

Bạn cần tham gia các kỳ thi có rated. Màu của tài khoản sẽ dựa trên rating của bạn theo bảng dưới đây.

Tên Khoảng rating
Newbie < 1200
Pupil 1200 – 1399
Specialist 1400 – 1599
Expert 1600 – 1899
Candidate Master 1900 – 2100
Master 2200 – 2299
International Master 2300 – 2399
Grandmaster 2400 – 2599
International Grandmaster 2600 – 2899
Legendary Grandmaster ≥ 2900

Mình có thể liên hệ với admin bằng cách nào?

Bạn có thể liên hệ với chúng tôi qua Fanpage Facebook 300 bài code thiếu nhi.

Mình có thể tham khảo mã nguồn 300bàicode.vn không?

300bàicode.vn được phát triển dựa trên nền tảng của hệ thống DMOJ, sử dụng bản fork do team VNOI phát triển.