zoukankan      html  css  js  c++  java
  • 18.5.12 c++选做题#4

    4:自己实现bitset

    描述程序

    填空,实现一个类似STL bitset的 MyBitset, 输出指定结果

    #include <iostream>
    #include <cstring>
    using namespace std;
    template <int bitNum>
    struct MyBitset 
    {
        char a[bitNum/8+1];
        MyBitset() { memset(a,0,sizeof(a));};
        void Set(int i,int v) {
            char & c = a[i/8];
            int bp = i % 8;
            if( v ) 
                c |= (1 << bp);
            else 
                c &= ~(1 << bp);
        }
    // 在此处补充你的代码
    void Print() {
            for(int i = 0;i < bitNum; ++i) 
                cout << (*this) [i];
            cout << endl;
        }
    
    };
    
    int main()
    {
        int n;
        int i,j,k,v;
        while( cin >>  n) {
            MyBitset<20> bs;
            for(int i = 0;i < n; ++i) {
                int t;
                cin >> t;
                bs.Set(t,1);
            }
            bs.Print();
            cin >> i >> j >> k >> v;
            bs[k] = v;
            bs[i] = bs[j] = bs[k];
            bs.Print();
            cin >> i >> j >> k >> v;
            bs[k] = v;
            (bs[i] = bs[j]) = bs[k];
            bs.Print();
        }
        return 0;
    }

    输入

    多组数据
    每组数据:
    第一行是整数 n , 1 <= n < 20;
    第二行是n个整数 k1,k2... kn,均在范围 [0,19]内。 
    第三行是 四个整数 i1,j1,k1,v1 。 0 <= i1,j1,k1 <= 19, v1值为0或1
    第三行是 四个整数 i2,j2,k2,v2 。 0 <= i2,j2,k2 <= 19, v2值为0或1

    输出

    对每组数据,共输出3行,每行20位,每位为1或者0。最左边称为第0位 
    第一行: 第 k1,k2 ... kn位为1,其余位为0。 
    第二行: 将第一行中的第 i1,j1,k1位变为 v1,其余位不变
    第三行: 将第二行中的第i2位和k2位变为v2,其余位不变样例输入

    4
    0 1 2 8
    7 19 0 1
    7 2 8 0
    1
    1
    1 1 1 0
    1 1 1 1
    

    样例输出

    11100000100000000000
    11100001100000000001
    11100000000000000001
    01000000000000000000
    00000000000000000000
    01000000000000000000
    

    提示推荐使用内部类,内部类中使用引用成员。引用成员要在构造函数中初始化。

    来源

    Guo Wei

     1 #include <iostream>
     2 #include <cstring>
     3 using namespace std;
     4 template <int bitNum>
     5 struct MyBitset
     6 {
     7     char a[bitNum / 8 + 1];
     8     MyBitset() { memset(a, 0, sizeof(a)); };
     9     void Set(int i, int v) {
    10         char & c = a[i / 8];
    11         int bp = i % 8;
    12         if (v)
    13             c |= (1 << bp);
    14         else
    15             c &= ~(1 << bp);
    16     }
    17     // 在此处补充你的代码
    18     class bsp {
    19     public:
    20         int hext[20], flag;
    21         bsp() { flag = 0; 
    22         memset(hext, 0, sizeof(int) * 20);
    23         }
    24         int&operator()(int x,MyBitset&k) {
    25             if (!flag) {
    26                 for (int i = 0; i <= bitNum / 8 + 1; i++) {
    27                     int l = k.a[i]; int c = 8*i;
    28                     while (l > 0) {
    29                         if(l%2)
    30                             hext[c]++;
    31                         c++;
    32                         l/= 2;
    33                     }
    34                 }
    35                 flag = 1;
    36             }
    37             return hext[x];
    38         }
    39     };
    40     bsp b;
    41     int&operator[](int x) {
    42         return b(x,*this);
    43     }
    44     //code ends
    45     void Print() {
    46         for (int i = 0; i < bitNum; ++i)
    47             cout << (*this)[i];
    48         cout << endl;
    49     }
    50 
    51 };
    52 
    53 int main()
    54 {
    55     int n;
    56     int i, j, k, v;
    57     while (cin >> n) {
    58         MyBitset<20> bs;
    59         for (int i = 0; i < n; ++i) {
    60             int t;
    61             cin >> t;
    62             bs.Set(t, 1);
    63         }
    64         bs.Print();
    65         cin >> i >> j >> k >> v;
    66         bs[k] = v;
    67         bs[i] = bs[j] = bs[k];
    68         bs.Print();
    69         cin >> i >> j >> k >> v;
    70         bs[k] = v;
    71         (bs[i] = bs[j]) = bs[k];
    72         bs.Print();
    73     }
    74     return 0;
    75 }
    View Code

    被比赛突然结束所支配的恐惧……

    (为什么还有限时啊我还以为起码会到考试之前都开的)

    (至少开到12点啊我还能再抢救一下啊)

    (没做完好不爽啊!!)

    不管对不对先存在这吧 没准下次又开了呢(冷静分析)

    注定失败的战争,也要拼尽全力去打赢它; 就算输,也要输得足够漂亮。
  • 相关阅读:
    tomcat使用redis存储共享session
    dubbo专题」dubbo其实很简单,就是一个远程服务调用的框架(1)
    SpringBoot Test集成测试
    IntelliJ Idea设置护眼浅绿色背景方法
    IDEA使用有道翻译插件
    IDEA Translation插件中有道智云(有道翻译)应用ID,密钥申请教程
    利用grep-console插件使Intellij idea显示多颜色调试日志
    mybatis 整合spring之mapperLocations配置的问题
    idea将maven项目打包成war包的方式,以及使用war包
    maven 常用命令
  • 原文地址:https://www.cnblogs.com/yalphait/p/9030625.html
Copyright © 2011-2022 走看看