Đề thi Tin học trẻ Quốc gia
Em mới lụm được bài này trong đề tin học trẻ quốc gia. Do giới hạn giá trị khá lớn nên em chưa bao hàm được hết tất cả trưởng hợp. Mong mọi người giúp em ạ
LĂN XÚC XẮC
Cho một bảng vuông được chia thành lưới gồm n x n ô vuông đơn vị. Các hàng của bảng được đánh số từ 1 tới n theo thứ tự từ trên xuống và các cột của bảng được đánh số từ 1 tới n theo thứ tự từ trái qua phải. Gọi ô (i,j) là ô nằm trên giao của hàng i và cột j. Có một quân xúc xắc hình khối lập phương đơn vị được đặt lên bảng sao cho mặt đáy của xúc xắc phủ kín ô (1,1). Mỗi mặt của xúc xắc có thể có từ 1 tói 6 chấm: Mặt trên của xúc xắc có 1 chấm, mặt hướng mép trái của bảng có 2 chấm, mặt hướng mép trên của bảng có 3 chấm, tổng số chấm trên hai mặt đối diện bất kỳ luôn bằng 7.
Khi lăn quân xúc xắc trên bảng từ một ô sang một ô khác kề cạnh với ô đang đứng, mặt trên của xúc xắc sẽ trở thành mặt bên tương ứng với hướng di chuyển và mặt bên theo hướng di chuyển sẽ trở thành mặt đáy. Sau mỗi phép lăn, các chấm ở mặt đáy của quân xúc xắc sẽ in lên ô mà quân xúc xắc vừa mới lăn sang. Ban đầu xúc xắc in 6 chấm lên ô (1,1).
Bước 1: Lăn sang phải đến khi tất cả các ô cùng hàng với xúc xắc đều được in chấm thì dừng lại.
Bước 2: Lân xuống dưới đến khi tất cả các ô cùng cột với xúc xắc đều được in chấm thì dừng lại.
Bước 3: Lăn sang trái đến khi tất cả các ô cùng hàng với xúc xắc đều được in chấm thì dừng lại.
Bước 4: Lăn lên trên đến khi tất cả các ô cùng cột với xúc xắc đều in chấm thì dừng lại.
Quá trình lăn xúc xắc lặp lại từ bước 1 và kết thúc ngay khi tất cả các ô của bảng đã được in chấm.
Yêu cầu: Nhập vào từ bàn phím số tự nhiên N (1<=N<=10^19) là số ô có trên một cạnh của bảng vuông. Xuất ra màn hình tổng số chấm được xúc xắc in lên bảng.
đề gì mà như game có cái để nghịch rồi
Hi vọng đúng
bạn giải thích thuật toán cho mình được ko ?
This post was flagged by the community and is temporarily hidden.
Lúc đầu nhìn đề có vẻ phức tạp và cũng hơi … hack não nhưng khi đọc xong code anh @Rok_Hoang thì thấy chỉ dùng C nên mình sẽ quất luôn
:)) code thời năm nhất
Nói chung là code có mùi sai rồi, nhưng ý tưởng là change() là để chuyển trạng thái của xúc sắc, sau đó cộng dồn lên thôi.
Submit lại xem sao
Cái ý này mình không hiểu lắm. Anh @Rok_Hoang hay chủ thớt giải thích hộ em được không?
Nếu hiểu theo ý em thì, khi lăn xúc xắc từ ô này qua ổ bên cạnh (bên phải) thì lăn 2 lần: mặt U (up) sẽ thành mặt D (down) đúng không nhỉ?
Hay chỉ lăn 1 lần: Mặt U (up) thành mặt R (right)?
Nếu lăn 2 lần (mặt U thành mặt D) thì rất dễ:
int ketqua= 1*(canh*canh)/2 + 6*((canh*canh)/2+1)
Bởi vì đề cho là khi con xúc xắc đang nằm ở ô (1,1) thì mặt D là 6 rồi, mặt U là 1. Nếu cứ lăn 2 lần (mặt U thành mặt D) thì chỉ làm việc với 2 con số là 1 và 6 thôi, còn các mặt khác thì không liên quan?
Nói chung là cái đề hack não quá!
chỉ lăn 1 lần thôi, từ U thành R. Con xúc sắc sẽ lăn theo hình xoắn ốc.
Notice: Đề nó còn một chỗ là 2 mặt đối diện nhau đều có tổng là 7 dùng cái này tính nhanh hơn nhiều.
À em quên ghi là test lớn nhất là N = 987654321123456789 ạ
Huhu
Bữa giờ không biết mua cục xúc xắc ở đâu nên không hình dung được để làm bài này ! Dự định là mình sẽ giải theo phương pháp Mảng 2 chiều