tdulik

Generator krasnych bankovnich uctu

Aug 27th, 2020 (edited)
1,343
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <stdio.h>
  2. #include <stdbool.h>
  3. #include <limits.h>
  4. bool overCisloUctu(long long cislo, int minPocetSudych, int minPocetVyskytu) {
  5.     int vahy[] = { 1, 2, 4, 8, 5, 10, 9, 7, 3, 6 };
  6.     int cetnosti[] = { 0,0,0,0,0,0,0,0,0,0 };
  7.     int maxPocetVyskytu = 0;
  8.     int pozice = 0;
  9.     int sum = 0;
  10.     int pocetSudych = 0;
  11.     while (cislo > 0) {
  12.         int cislice = cislo % 10; // modulo, tj. zbytek po deleni
  13.         cetnosti[cislice]++;
  14.         if (cetnosti[cislice] > maxPocetVyskytu)
  15.             maxPocetVyskytu = cetnosti[cislice];
  16.         if ((cislice % 2) == 0) pocetSudych++;
  17.         sum = sum + cislice * vahy[pozice];
  18.         cislo = cislo / 10;
  19.         pozice++;
  20.     }
  21.     // pocet uvodnich nul bude = 10-pozice
  22.     pocetSudych = pocetSudych + 10 - pozice;
  23.     return ((sum % 11) == 0) && pocetSudych >= minPocetSudych && maxPocetVyskytu >= minPocetVyskytu;
  24.  
  25. }
  26.  
  27. int main(int argc, char * argv[]) {
  28.  
  29.     printf("Generator cisel uctu...\n");
  30.     double progres = 0;
  31.     int pocitadlo = 0;
  32.     long long x = 0, konec=9999999999;
  33.     if (argc > 1) {
  34.         if (argv[1][0] == '1') {
  35.             x = 5000000000;
  36.             fprintf(stderr, "Hledam v rozsahu 5G-10G\n");
  37.         }
  38.         else {
  39.             konec = 5000000000;
  40.             fprintf(stderr, "Hledam v rozsahu 0-5G\n");
  41.         }
  42.     } else fprintf(stderr, "Hledam v rozsahu 0-10G\n");
  43.  
  44.     for (; x <= konec; x++) {
  45.         if (pocitadlo == 10000000) {
  46.             pocitadlo = 0;
  47.             fprintf(stderr, "progres=%.1lf procent\n", progres);
  48.             progres = progres + 0.1;
  49.         }
  50.         pocitadlo++;
  51.         if (overCisloUctu(x, 0, 8))
  52.             printf("%010lld\n", x);
  53.     }
  54.  
  55. }
RAW Paste Data