zoukankan      html  css  js  c++  java
  • 集福卡活动

    题目地址

    #include <iostream>
    #include <fstream>
    #include <algorithm>
    #include <math.h>
    #include <string.h>
    #include <stdio.h>
    #define re register
    #define gc getchar()
    #define int long long 
    using namespace std;
    const int maxn = 35 ;
    int Qread () {
        int x = 0 ;
        char ch = gc ;
        while (ch > '9' || ch < '0') ch = gc ;
        while (ch >='0' && ch <= '9') {
            x = x *10 + ch - '0' ;
            ch = gc ;
        }
        return x ;
    }
    int n ,num = 0 ;
    struct F {
        int a , b ;
    };
    F f[maxn] ;
    int gcd(int a , int b) {
        if (!b) return a ;
        else return gcd(b , a% b) ;
    }
    F pls(F A , F B) {
        int lcm = A.b*(B.b/gcd(A.b , B.b) );
        F ans ;
        ans.b = lcm ;
        ans.a = A.a*(lcm/A.b)+B.a*(lcm/B.b);
        int g = gcd(ans.a ,ans.b) ;
        ans.a/=g , ans.b/= g ;
        return ans ;
    }
    int getd(int x){
        int ans = 0 ;
        while (x){
            ++ans ;
            x/=10 ;
        }
        return ans ;
    }
    signed main () {
    //    freopen ("1291.in" , "r" ,stdin) ;
        n = Qread () ;
        for (re int i = 1 ; i <= n; ++ i) {
            f[i].a = n , f[i].b = i ;
            int g = gcd(n , i) ;
            f[i].a/=g , f[i].b/= g ;
        }
        F all ;
    
        all.a = 0 , all.b = 1 ;
        for (re int i = 1 ; i <= n; ++ i) {
            all = pls(all , f[i]) ;
            num += all.a/all.b ;
            all.a%=all.b;
            //cout <<i<<' '<<num<<' '<<all.a<<' '<<all.b<<endl;
        }
        if (all.b == 1)cout <<all.a+num<<endl;
        else {
            int L = all.a/all.b + num ;
            int ld = getd(L) ;
            int dd = getd(all.b) ;
            for(re int i = 1; i<= ld ;++ i)cout <<' ';
            cout << all.a%all.b<<endl;
            cout <<L;
            for (re int i = 1; i <= dd ;++ i) cout <<'-';
            cout <<endl;
            for (re int i = 1 ;i <= ld ; ++ i)cout <<' ';
            cout <<all.b<<endl;
        //    cout << all.a<<' '<<all.b<<endl;
        }
        fclose (stdin) ;
        fclose (stdout);
        return 0;
    }
    //33 31 30 37

    集齐支付宝的五福只需要不到12次操作吗?

    为了验证这一点,笔者在PC上模拟了随机产生福卡,重复一万次积攒福卡的过程。

     

    这样看来,商家在福卡的数量分布上耍了小计俩。总有那么一种福卡出现的概率极小。

    以下源代码:

     1 #include <cstring>
     2 #include <cstdio>
     3 #include <ctime>
     4 #include <cstdlib>
     5 #define re register
     6 #define GC getchar()
     7 int Qread () {
     8     int X = 0;
     9     char C = GC ;
    10     while (C > '9' || C < '0') C = GC ;
    11     while (C >='0' && C <='9') {
    12         X = X * 10 + C - '0' ;
    13         C = GC ;
    14     }
    15     return X ;
    16 }
    17 const int Maxn = 64 , T = 10000 ;
    18 int N ;
    19 unsigned long long int Ed , Tot = 0 ;
    20 int main () {
    21     N = Qread() ,Ed = ((unsigned long long int)1 << N) - 1;
    22     srand (time(0)) ;
    23     for (re int i = 1 ; i <= T ; ++ i) {
    24         unsigned long long int Now = 0 ;
    25         int Cnt = 0 ;
    26         while (Now != Ed) {
    27             int X = rand() % N ;
    28             Now |= ((unsigned long long int)1 << X);
    29             ++ Cnt ;
    30         }
    31         printf ("The %d th time takes %d
    " , i , Cnt) ;
    32         Tot += Cnt ;
    33     }
    34     putchar(10) ;
    35     printf ("Average = %lf 
    " , (double)Tot / T) ;
    36     fclose (stdin) ;
    37     fclose (stdout);
    38     return 0;
    39 }
  • 相关阅读:
    Channel
    MemCache
    算法笔记_124:密码脱落(Java)
    算法笔记_123:蓝桥杯第七届省赛(Java语言B组部分习题)试题解答
    算法笔记_122:蓝桥杯第七届省赛(Java语言A组)试题解答
    算法笔记_121:蓝桥杯第六届省赛(Java语言C组部分习题)试题解答
    算法笔记_120:蓝桥杯第六届省赛(Java语言B组部分习题)试题解答
    算法笔记_119:蓝桥杯第六届省赛(Java语言A组)试题解答
    算法笔记_118:算法集训之结果填空题集二(Java)
    算法笔记_117:算法集训之结果填空题集一(Java)
  • 原文地址:https://www.cnblogs.com/bj2002/p/10361460.html
Copyright © 2011-2022 走看看