Tìm Số đối Xứng Thứ N Vd Input 30 Output 212 Giới Hạn N<

logologoTìm×

Tìm kiếm với hình ảnh

Vui lòng chỉ chọn một câu hỏi

Tìm đáp án
    • icon_userĐăng nhập
    • |
    • Đăng ký
    icon_menu
avataricon

Hoidap247.com Nhanh chóng, chính xác

Hãy đăng nhập hoặc tạo tài khoản miễn phí!

Đăng nhậpĐăng ký
  • add
  • Đặt câu hỏiiconadd
  • logo

    loading

    +

    Lưu vào

    • +

      Danh mục mới

    Lưuavataravatar
    • thucle2702logoRank
    • Chưa có nhóm
    • Trả lời

      0

    • Điểm

      336

    • Cảm ơn

      0

    • Tin Học
    • Lớp 9
    • 30 điểm
    • thucle2702 - 14:10:31 08/06/2022
    Tìm số đối xứng thứ n Vd Input 30 Output 212 Giới hạn n<10^6 Các bạn cho mình ý tưởng code bài này có thời gian chạy < 1s
    • Hỏi chi tiết
    • reportBáo vi phạm

    Hãy luôn nhớ cảm ơn và vote 5* nếu câu trả lời hữu ích nhé!

    TRẢ LỜI

    avataravatar
    • Daoanhviet96logoRank
    • Chưa có nhóm
    • Trả lời

      2901

    • Điểm

      47938

    • Cảm ơn

      1864

    • Daoanhviet96
    • Câu trả lời hay nhất!
    • 08/06/2022

    Ý tưởng:

    - Tạo một mảng sdx lưu các số đối xứng.

    - Đầu tiên, lưu các số từ 1->9.

    - Sau đó, cứ mỗi số thứ i ta sẽ lưu các số đối xứng i+reverse(i), i+k+reverse(i) (0<=k<=9). Vd: Số 12 ta có thể lưu các số đối xứng sau: 1221, 12021, 12121, 12221, 12321, ... , 12921. Để các số đối xứng được theo thứ tự, ta sẽ lưu các số i+reverse(i) trước rồi mới lưu các số i+k+reverse(i).

    - Cuối cùng là nhập và xuất ra số đối xứng thứ n (phần tử thứ n-1).

    Code:

    #include <bits/stdc++.h>using namespace std;vector<string> sdx;string rvs(string s){ string s2 = ""; for (long long i=s.size()-1; i>=0; i--){ s2+=s[i]; } return s2;}void ts(){ for (long long i=1; i<=9; i++){ sdx.push_back(to_string(i)); } for (long long i=0; i<=4; i++){ long long s = pow(10,i); long long e = pow(10,i+1); //s*10 for (long long j=s; j<e; j++){ string t = to_string(j); sdx.push_back(t+rvs(t)); } for (long long j=s; j<e; j++){ for (long long k=0; k<=9; k++){ string t = to_string(j); sdx.push_back(t+to_string(k)+rvs(t)); } } }}int main(){ ts(); long long n; cin >> n; cout << sdx[n-1];}

    $\color{red}{\text{#Daoanhviet96}}$

    imagerotate

    Hãy giúp mọi người biết câu trả lời này thế nào?

    avatar

    starstarstarstarstarstarstarstarstarstarstarstarstarstarstarstarstarstarstarstarstarstarstarstarstarstarstarstarstarstar5starstarstarstarstar1 voteGửiHủy
    • hertCảm ơn 2
    • reportBáo vi phạm
    • avataravatar
      • hoanganhnguyen09302logoRank
      • GenZ A00
      • Trả lời

        9055

      • Điểm

        97370

      • Cảm ơn

        5311

      căng vậy :)

    • avataravatar
      • Daoanhviet96logoRank
      • Chưa có nhóm
      • Trả lời

        2901

      • Điểm

        47938

      • Cảm ơn

        1864

      Còn code của ông thì không chạy nổi 10^6 trong 1s đâu :v

    • avataravatar
      • hoanganhnguyen09302logoRank
      • GenZ A00
      • Trả lời

        9055

      • Điểm

        97370

      • Cảm ơn

        5311

      uk căng lắm đến ${10^5}$

    • avataravatar
      • Daoanhviet96logoRank
      • Chưa có nhóm
      • Trả lời

        2901

      • Điểm

        47938

      • Cảm ơn

        1864

      Cơ mà code ông nó là if else đến chết nhỉ :))

    • avataravatar
      • wii235logoRank
      • Competitive programming
      • Trả lời

        90

      • Điểm

        2206

      • Cảm ơn

        112

      trong hàm rvs thay thành: reverse(s.begin(), s.end()); return s; cho nhanh này :))

    Đăng nhập để hỏi chi tiết

    Xem thêm:

    • >> Tuyển tập 100+ đề bài đọc hiểu Ngữ Văn lớp 9
    avataravatar
    • tuongtaylorlogoRank
    • Hội code dạo
    • Trả lời

      2376

    • Điểm

      46183

    • Cảm ơn

      1806

    • tuongtaylor
    • 09/06/2022

    #toidicodedao

    Ý tưởng:

    - Số đối cứng có tính chất: một số a, ta đảo ngược a rồi ghép vào sau (đối với số có chữ số chẵn), đảo ngược a div 10 rồi ghép vào sau (đối với số có chữ số lẻ). Khá khó giải thích, nên mình lấy ví dụ: Đoạn các số có 2 và 3 chữ số (cặp chẵn, lẻ) có 10^2*2 số đối xứng, loại các tường hợp số 0 đứng đầu, ta còn (10^2-10)*2 trường hợp. Ta đếm rồi xác định xem số cần tìm nằm trong khoảng nào, sau đó xây dựng lại số này. Vd: 30 nằm trong khoảng 3 chữ số, cách số có 3 chữ số đầu tiên là 11 đơn vị. Số đầu tiên là 101 tức là 10, ta cộng cho 11 được 21, làm theo tính chất thu được 212. Một vài trường hợp đặc biệt khác ràng thêm trong chương trình.

    #include <bits/stdc++.h>using namespace std;int n,i; long long k,kq; bool odd;int main () { cin>>n; if (n==9) return cout<<9, 0; k=1; odd=1; for (i=0; i+(k*10-k)<=n; ){ odd=(!odd); i+=k*10-k; if (odd==1) k*=10; } k+=n-i-1; kq=k; while (k!=0){ if (!(odd && k==kq && n!=i)) kq=kq*10+(k%10); k/=10; } cout<<kq;}

    Hãy giúp mọi người biết câu trả lời này thế nào?

    starstarstarstarstarstarstarstarstarstarstarstarstarstarstarstarstarstarstarstarstarstarstarstarstarstarstarstarstarstar5starstarstarstarstar1 voteGửiHủy
    • hertCảm ơn 1
    • reportBáo vi phạm
    • avataravatar
      • bestanhvanlogoRank
      • CHUYÊN GIA
      • Trả lời

        2020

      • Điểm

        47088

      • Cảm ơn

        1741

      https://hoidap247.com/cau-hoi/4545598 anh làm bài này giúp e vs đc ko ?

    Đăng nhập để hỏi chi tiếtXEM LỜI GIẢI SGK TIN 9 - TẠI ĐÂY

    Bạn muốn hỏi điều gì?

    questionĐặt câu hỏi

    Tham Gia Group Dành Cho Lớp 9 - Ôn Thi Vào Lớp 10 Miễn Phí

    Bảng tin

    Bạn muốn hỏi điều gì?

    iconĐặt câu hỏi

    Lý do báo cáo vi phạm?

    Gửi yêu cầu Hủy

    logo

    Cơ quan chủ quản: Công ty Cổ phần Công nghệ Giáo dục Thành Phát

    • social
    • social
    • social

    Tải ứng dụng

    google playapp store
    • Hướng dẫn sử dụng
    • Điều khoản sử dụng
    • Nội quy hoidap247
    • Góp ý
    • Tin tức
    • mailInbox: m.me/hoidap247online
    • placeTrụ sở: Tầng 7, Tòa Intracom, số 82 Dịch Vọng Hậu, Cầu Giấy, Hà Nội.
    Giấy phép thiết lập mạng xã hội trên mạng số 331/GP-BTTTT do Bộ Thông tin và Truyền thông.

    Từ khóa » Số đối Xứng Code