[THỬ THÁCH CHO trumtinhoc và những người khác] Ngôn ngữ: C++ Hãy lập trình một keygen (phần mềm tạo mã số) Dạng mã số (key): XXX-YYYYYYY Luật mã số: - ba số đầu tiên (XXX) KHÔNG ĐƯỢC BAO GỒM CÁC SỐ TRÊN: 333, 444, 555, 666, 777, 888, 999 - bảy số cuối (YYYYYYY) tất cả chữ số cộng lại PHẢI CHIA HẾT CHO 7 và chữ số cuối KHÔNG BAO GỒM 0 hay ≥8 Luật lập trình: không được dùng header bất kỳ, không được copy qua mạng (ví dụ: github, pastebin) Ví dụ: 527-7043007 527 ≠ 333; 444; 555; 666; 777; 888; 999 ⇒ hợp lệ 7043007 7+0+4+3+0+0+7 = 21 21 / 7 = 3 (chia hết) 7 là số cuối của 7043007, 7 < 8 ⇒ hợp lệ

2 câu trả lời

#include <bits/stdc++.h>
using namespace std;

int getx(){
 srand(time(NULL));
 int kq=rand()%(999-100+1)+100;
 if (kq==333 || kq==444 || kq==555 || kq==666 || kq==777 || kq==888 ||  kq==999)
    return getx();
 return kq; 
}

bool kt(int n){
 bool kq=0;
 int s=0;
 while (n!=0) {
  s+=n%10;
  n/=10;
 }
 return (s%7==0);
}

int gety(){
 srand(time(0));
 int kq=rand()%(9999999-1000000+1)+1000000, t=0;
   while (kq%10==0 || kq%10>=8 || !kt(kq)) ++kq;
   return kq;
}

int main()
{
 ios_base::sync_with_stdio(0);
 cin.tie(0);cout.tie(0);
 cout<<getx()<<"-"<<gety();
}

#include <iostream>
using namespace std;

#define ll long long
#define ord(a) int(a)

int x, y;

int sumDigits(int n) {
    string s = to_string(n);
    ll res = 0;
    
    for(int i = 0; i < s.size(); ++i) res += ord(s[i]) - 48;
    return res;
}

void xKey() {
    srand(time(NULL));
    x = rand() % (999 - 100 + 1) + 100;
    while(x == 333 && x == 444
        && x == 555 && x == 666
            && x == 777
                && x == 888 && x == 999) --x;
}

void yKey() {
    srand(time(NULL));
    y = rand() % (9999999 - 1000000 + 1) + 1000000;
    while((y % 10 == 0 || y % 10 >= 8) || sumDigits(y) % 7 != 0) --y;
}

int main() {
    xKey();
    yKey();
    cout << x << '-' << y;
}

Câu hỏi trong lớp Xem thêm