签到

05月08日
尚未签到

共有回帖数 0

    李小主任

    等级:
    #include cstdlib
    #include iostream
    #include iomanip
    #include cmath
    #include string
    #include numeric
    #include vector
    #include set
    using namespace std;
    void z1();
    void z2();
    void z3();
    void z4();
    void z5();
    void z6();
    void z7();
    void z8();
    int c3(int, int);
    int draw(int(*)(double), int(*)(double), int);
    void z9();
    string ten2(int);
    void z10();
    int main()
    {
       z1();
       system("PAUSE");
       z2();
       system("PAUSE");
       z3();
       system("PAUSE");
       z4();
       system("PAUSE");
       z5();
       system("PAUSE");
       z6();
       system("PAUSE");
       z7();
       system("PAUSE");
       z8();
       system("PAUSE");
       z9();
       system("PAUSE");
       z10();
       system("PAUSE");
       return EXIT_SUCCESS;
    }

    int draw(int(*f)(double x), int(*g)(double x), int z = 0)
    {
       int m, yy, n;
       double y;
       const int M = 62;
       string s1, s2;
       for (int i = 0; i  M; i++)
           s1 += ' ';
       for (yy = 0; yy = 20; yy++)
       {
           y = yy / 10.0;
           s2 = s1;
           m = (*f)(y);
           s2[m] = '*';
           s2[M - m] = '*';
           if (z)
           {
               n = (*g)(y);
               if (n  M && n  0)
                   s2[n] = '+';
           }
           cout  s2  endl;
       }
       cout  endl;
    }

    /* TODO (#1#): 绘制余弦曲线 */
    int f1(double x)
    {
       return (int)(acos(1-x) *10);
    }

    int f3(double x)
    {
       return 31-(int)(25 *sqrt(1-(x - 1)*(x - 1)));
    }

    int f2(double x)
    {
       return (int)(45 *(x - 1) + 31);
    }

    void z1()
    {
       draw(f1, f1);
       return ;
    }

    /* TODO (#1#): 绘制余弦曲线和一条直线
    */
    void z2()
    {
       draw(f1, f2, 1);
       return ;
    }

    void z3()
    {
       /* TODO (#1#): 绘制圆 */
       draw(f3, f1);
       return ;
    }

    void z4()
    {
       /* TODO (#1#): 唱歌比赛
       去掉最高分和最低分得到平均分 */

       int max, min, sum = 0;
       int ii[10] =
       {
           1, 2, 3, 4, 5, 6, 7, 8, 9, 11
       };
       max =  *max_element(ii, ii + 10);
       min =  *min_element(ii, ii + 10);
       sum = accumulate(ii, ii + 10, 0);
       cout  "最高分 是 "  max  endl;
       cout  "最低分 是 "  min  endl;
       cout  "平均分 是 "  (double)(sum - max - min) / 8  endl;
       cout  endl;
       return ;
    }

    void z5()
    {
       /* TODO (#1#): 555555的最大的三位数约数是多少 */
       long j;
       int i;
       j = 555555;
       for (i = 999; i  99; i--)
       if (!(j % i))
       {
           cout  j  "的最大的三位数约数是"  i  endl;
           break;
       }
       cout  endl;
       return ;
    }

    void z6()
    {
       /* TODO (#1#): 13的13次方的最后三位数是多少 */

       long j, y, kk = 1;
       int i;
       j = 13;
       y = 13;
       for (i = 1; i = y; i++)
           kk *= j, kk %= 1000;
       cout  j  "的"  y  "次方的最后三位数是"  kk  endl;
       cout  endl;
       return ;
    }

    void z7()
    {
       /* TODO (#1#): 100 !的末尾有多少个0 */
       int n, count = 0, i, j;
       n = 100;
       for (i = 5; i = n; i += 5)
       {
           count++;
           for (j = 25; j = n; j *= 5)
               if (!(i % j))
                   count++;
       }
       cout  n  "!的末尾有"  count  "个0"  endl;
       cout  endl;
       return ;
    }

    void z8()
    {
       /* TODO (#1#): 5个取3个的排列的总数以及方法 */
       int n, count = 1;
       cout  "5个取3个的排列的总数 是 n";
       vector  int  ve1;
       set  int  se1;
       for (int i = 1; i  6; i++)
           ve1.push_back(i);
       while (next_permutation(ve1.begin(), ve1.end()))
       {
           n = ve1[0] *100+ve1[1] *10+ve1[2];
           if (se1.find(n) == se1.end())
           {
               se1.insert(n);
               cout  count++  ":"  ve1[0]  ends  ve1[1]  ends  
                   ve1[2]  endl;
           }
       }
       cout  endl;
       return ;
    }

    void z9()
    {
       /* TODO (#1#): 计算杨辉三角形 */
       int a, b, c = 12, count = 1;
       cout  "杨辉三角形是"  endl;
       for (b = 1; b = c; b++)
       {
           for (a = 1; a = c - b; a++)
               cout  "   ";
           for (a = 1; a = b + 1; a++)
           {
               cout  setw(5)  c3(b, a)  ends;
           }
           cout  endl;
       }
       return ;
    }

    int c3(int x, int y)
    {
       if (y == 1 || y == x + 1)
           return 1;
       return c3(x - 1, y - 1) + c3(x - 1, y);
    }

    /* TODO (#1#): 把10进制度变成2进制 */
    string ten2(int x1)
    {
       string s1;
       char ch[256];
       s1 = itoa(x1, ch, 2);
       return s1;
    }

    /* TODO (#1#): 把10进制度变成2进制 */

    void z10()
    {
       int num;
       num = 256;
       cout  "数"  num  "的二进制表示是"  ten2(num);
       cout  endl;
       return ;
    }
    /*《c趣味编程》18-29题
    */
    #include cstdlib
    #include iostream
    #include cmath
    #include ctime
    #include vector
    using namespace std;
    const int MTOH = 86400;
    //24*60*60=86400,用于将秒化成天
    void z11();
    void z12();
    void z13();
    void z14();
    void z15();
    void z16();
    void z17();
    /* TODO (#1#): 用于将y年m月d日化成秒 */
    time_t mktime(int y, int m, int d);
    int main()
    {
    z11();
    system("PAUSE");
    z12();
    system("PAUSE");
    z13();
    system("PAUSE");
    z14();
    system("PAUSE");
    z15();
    system("PAUSE");
    z16();
    system("PAUSE");
    z17();
    system("PAUSE");
    return EXIT_SUCCESS;
    }

    void z12()
    /* TODO (#1#): 四位数前两位相同,后两位也相同,并且是个数
    的平方
    问他 是多少 */
    {
    int num, i, j, n2;
    for (i = 0; i  10; i++)
    for (j = 0; j  10; j++)
    if (i != j)
    {
    num = i * 1100+j * 11;
    n2 = (int)sqrt(num);
    if (num == n2 *n2)
    cout  "四位数前两位相同,后两位也相同,并且是个数的平方"  
    num  "="  n2  "*"  n2  endl;
    }
    return ;
    }

    void z13()
    /* TODO (#1#): 银行月息0.63%
    一 人打算今后五年每年年底取1000,正好取完,
    问第一年应该存多少 */
    {
    int a, b, c = 0;
    double x = 1000, y = 0.0063, z;
    z = 1000 / (1+12 * y);
    for (b = 1; b  5; b++)
    z = (z + 1000) / (1+12 * y);
    cout  "银行月息0.63%一 人打算今后五年每年年底取1000"  endl  
    " ,正好取完,第一年应该存"  z  endl;
    return ;
    }

    void z14()
    /* TODO (#1#): 整存整取存钱的利率
    1,2,3,5,8年的利率分别是
    0.63%,0.66%,0.69%,0.75%,0.84%
    存20年钱问怎样存 利最大 */
    {
    const int NN = 5;
    int ii;
    double max = - 1, nx;
    vector  int  ve1(5), sa(5, 0);
    double lu[NN] =
    {
    0.0084, 0.0075, 0.0069, 0.0066, 0.0063
    }
    , ly[NN] =
    {
    8, 5, 3, 2, 1
    }
    , lx[5];
    for (ii = 0; ii  NN; ii++)
    lx[ii] = 1+lu[ii] *ly[ii] *12;
    for (sa[0] = 0; sa[0]  3; sa[0]++)
    for (sa[1] = 0; sa[1]  5; sa[1]++)
    for (sa[2] = 0; sa[2]  7; sa[2]++)
    for (sa[3] = 0; sa[3]  11; sa[3]++)
    {
    sa[4] = 20-sa[0] *8-sa[1] *5-sa[2] *3-sa[3] *2;
    if (sa[4] = 0)
    {
    nx = pow(lx[0], sa[0]) *pow(lx[1], sa[1]) *pow(lx[2], sa[2])*pow
    (lx[3], sa[3]) *pow(lx[4], sa[4]);
    if (nx  max)
    {
    ve1 = sa;
    max = nx;
    }
    }
    }
    cout  "存20年钱这样存 利最大"  endl;
    for (int i = 0; i  5; i++)
    cout  ly  "年期存"  ve1  "次"  endl;
    cout  2000 *max  endl;
    return ;
    }

    void z15()
    /* TODO (#1#): 五人捕鱼
    a先将鱼分为5份,把多余的一条扔了,拿走自己
    的一份,bcde同样这样拿,问鱼最少多少条 */
    {
    const int NN = 5;
    int num, i, flag, xx;
    for (num = 6; num  100000; num += 5)
    {
    for (i = 0, xx = num; i  NN; i++)
    {
    if (!((xx - 1) % 5))
    flag = 1, xx = 4 *(xx - 1) / 5;
    else
    flag = 0;
    }
    if (flag)
    {
    cout  "鱼最少"  num  "条"  endl;
    break;
    }
    }

    return ;
    }

    void z16()
    /* TODO (#1#): 卖鱼,第一次卖了1/2加1/2条
    第2次卖了1/3加1/3条
    第3次卖了1/4加1/4条
    第4次卖了1/5加1/5条
    余下11条
    问一开始是多少条 */
    {
    const int NN = 5;
    int nn, j, flag, n;
    for (nn = 23; nn  1000; nn += 2)
    {
    n = nn;
    flag = 0;
    for (j = 1; j  NN; j++)
    {
    if ((n + 1) % (j + 1) == 0)
    {
    n -= (n + 1) / (j + 1);
    flag += 1;
    }
    else
    {
    flag = 0;
    break;
    }
    }
    if (flag == NN - 1 && n == 11)
    {
    cout  "一开始有"  nn  "条鱼"  endl;

    }
    }
    return ;
    }

    void z17()
    /* TODO (#1#): 21筐鱼,7筐满,7筐半,7筐空,在不倒出鱼的
    情况下,怎样平分为3份 */
    {
    int a[3][3], b[3][3], i, j, m, tmp;
    for (i = 1; i = 3; i++)
    {
    a[i - 1][0] = i;
    a[i - 1][1] = 7-2 * i;
    a[i - 1][2] = 7-i - a[i - 1][1];
    }
    for (i = 0; i  3; i++)
    for (j = 0; j  3; j++)
    {
    tmp = 5-i - j;
    if (tmp  - 1 && tmp  3 && a[1] = a[j][1])
    {
    for (m = 0; m  3; m++)
    {
    b[0][m] = a[m];
    b[1][m] = a[j][m];
    b[2][m] = a[tmp - 1][m];
    }
    cout  "平分为3份的方法是 n";
    cout  "满半空 n";
    cout  b[0][0]  ends  b[0][1]  ends  b[0][2]  endl;
    cout  b[1][0]  ends  b[1][1]  ends  b[1][2]  endl;
    cout  b[2][0]  ends  b[2][1]  ends  b[2][2]  endl;
    }
    }
    return ;
    }

    time_t mktime(int y, int m, int d)
    /* TODO (#1#): 用于将y年m月d日化成秒 */
    {
    tm t;
    t.tm_year = y - 1900;
    t.tm_mon = m;
    t.tm_mday = d;
    t.tm_hour = 0;
    t.tm_min = 0;
    t.tm_sec = 0;
    t.tm_isdst = 0;
    return mktime(&t);
    }

    void z11()
    /* TODO (#1#): 某人是1999年9月29日生日
    问到2006年9月29日他活了多少天 */
    {
    time_t t3, t4;
    t3 = mktime(2006, 10, 21);
    t4 = mktime(1999, 10, 21);
    cout  "某人是1999年10月21日生日,到2006年10月21日他活了"  (t3 - t4) /
    MTOH  "天"  endl;
    return ;
    }

    /*《c趣味编程》18-29题
    */

    #include cstdlib
    #include iostream
    #include cmath
    #include ctime
    #include vector
    #include map
    using namespace std;
    namespace YinZi
    {
    vector  int  ve2;
    int minYinzi(const unsigned long x)
    /* TODO (#1#): 得到一个数的最小因子 */
    {
    int i, t = 0;
    if (x % 2 == 0)
    return 2;
    for (i = 0; t = sqrt(x); i++)
    {
    t = ve2;
    if (x % t == 0)
    return t;
    }
    return x;
    };
    unsigned long addYinZi(const unsigned long x)
    /* TODO (#1#): 计算除了他自身之外的因子的和 */
    {
    int t = - 1, y = x, m;
    if (x == 1)
    return 0;
    if (x == 2)
    return 1;
    vector  int  ve1;
    vector  int  ve2;
    do
    {
    m = t;
    t = minYinzi(y);
    if (t == m)
    ve2.back()++;
    else
    {
    ve1.push_back(t);
    ve2.push_back(1);
    }
    y /= t;
    }
    while (y != 1);
    int i;
    unsigned long Yinzihe = 1;
    for (i = 0; i  ve2.size(); i++)
    {
    if (ve2 != 1)
    Yinzihe *= ((unsigned long)pow((double)ve1, ve2 + 1) - 1)
    / (ve1 - 1);
    else
    Yinzihe *= ve1 + 1;
    }
    Yinzihe -= x;
    return Yinzihe;
    };
    };
    long HueiWen(const long);
    void z18();
    void z19();
    void z20();
    void z21();
    void z22();
    int Threeto2(int, int, int, long &);
    int issqr(int);
    void z23();
    int Mihe(int);
    void z24();
    int addYinZi(int);
    int isMPrime(int, long);
    void z25();
    int isPrime(const long);
    void fillve2();
    void z26();
    long auton(int n);
    void z27();
    void z28();
    void z29();
    int main()
    {
    //z27();
    z18();
    system("PAUSE");
    cout  endl;
    z19();
    system("PAUSE");
    cout  endl;
    z20();
    system("PAUSE");
    cout  endl;
    z21();
    system("PAUSE");
    cout  endl;
    z22();
    system("PAUSE");
    cout  endl;
    z23();
    system("PAUSE");
    cout  endl;
    z24();
    system("PAUSE");
    cout  endl;
    z25();
    system("PAUSE");
    cout  endl;
    z26();
    system("PAUSE");
    cout  endl;
    z27();
    system("PAUSE");
    cout  endl;
    z28();
    system("PAUSE");
    cout  endl;
    z29();
    system("PAUSE");
    cout  endl;
    return EXIT_SUCCESS;
    }

    void z18()
    /* 个位数为6并且可以 被3整除的数有多少个 */
    {
    cout  "位数为6并且可以 被3整除的数有"  endl  endl;
    int c = 0;
    for (int b = 1000; b = 9999; b++)
    if (!((b *10+6) % 3))
    c++;
    cout  c  "个"  endl;
    return ;
    }

    void z19()
    /* TODO (#1#): 一个数被8除余1,所得的商被8除也余1,第二次
    的商被8除余7,最后的商为a,又知这个数被17
    除余4,所得的商被17除余15,最后的商是a的2
    倍,问这个数是多少 */
    {
    cout  "一个数被8除余1,所得的商被8除也余1,第二次"  endl;
    cout  "的商被8除余7,最后的商为a,又知这个数被17"  endl;
    cout  "除余4,所得的商被17除余15,最后的商是a的2倍"  endl;
    long x, y, i = 1;
    do
    {
    x = i;
    x = x * 8+7;
    x = x * 8+1;
    x = x * 8+1;
    y = i;
    y = 2 * y * 17+15;
    y = y * 17+4;
    i++;
    }
    while (x != y);
    cout  "这个数是 "  x  endl;
    }

    void z20()
    /* TODO (#1#): 一个数的七进制表示是abc,而他的九进制表示
    是cba,问这个数是 多少 */
    {
    cout  "一个数的七进制表示是abc,而他的九进制表示是cba"  endl;
    char ch[7];
    string s1, s2, s3;
    for (int i = 100; i  999; i++)



    {
    s1 = itoa(i, ch, 7);
    s3 = s1;
    s2 = itoa(i, ch, 9);
    reverse(s1.begin(), s1.end());
    if (s1 == s2)
    {
    cout  "这个数是 "  s3  '('  7  ')';
    cout  "="  s2  '('  9  ')';
    cout  "="  i  '('  10  ')'  endl;
    break;
    }
    }
    }

    long HueiWen(const long x1)
    /* TODO (#1#): 得到一个数的回文数 */
    {
    char ch[100];
    string s1;
    long m;
    s1 = ltoa(x1, ch, 10);
    reverse(s1.begin(), s1.end());
    m = atol(s1.c_str());
    return m;
    }

    void z21()
    /* TODO (#1#): 一个数的九倍是他的回文数,这个数是多少 */
    {
    cout  "一个数的九倍是他的回文数"  endl;
    int c = 0;
    for (int b = 1000; b = 9999; b++)
    if (HueiWen(b) == b *9)
    {
    cout  "这个数是 "  b  endl;
    cout  "他的九倍是 "  b *9  endl;
    }
    return ;
    }

    void z22()
    /* TODO (#1#): 95859后的回文数(最接近他的)是多少 */
    {
    cout  "95859后的回文数(最接近他的)是"  endl;
    int c = 95859;
    do
    {
    c++;
    }
    while (HueiWen© != c);
    cout  c  endl;
    return ;
    }

    void z23()
    /* TODO (#1#): 有两个平方三位数abc和xyz,正好组成三个平方两位数
    这两个数是多少 */
    {
    cout  "有两个平方三位数abc和xyz,正好组成三个平方两位数"  endl;
    int i, j, k;
    long e;
    int m, n;
    for (i = 4; i = 9; i++)
    for (j = 0; j = 9; j++)
    for (k = 0; k = 9; k++)
    if (Threeto2(i, j, k, e))
    {
    cout  "三个平方两位数是:"  endl;
    cout  "1:"  i *i  "="  i  "*"  i  endl;
    cout  "2:"  j *j  "="  j  "*"  j  endl;
    cout  "3:"  k *k  "="  k  "*"  k  endl;
    cout  "两个平方三位数是:"  endl;
    m = (int)sqrt(e % 1000);
    n = (int)sqrt(e / 1000);
    cout  "1:"  m *m  "="  m  "*"  m  endl;
    cout  "2:"  n *n  "="  n  "*"  n  endl;
    }
    return ;
    }

    int Threeto2(int x, int n, int c, long &nn)
    /* TODO (#1#): 通过3个两位数得到两个三位数 */
    {
    int d[3], t1, t2;
    string s1, s2, s3, s4;
    char ch[11];
    d[0] = x * x;
    d[1] = n * n;
    d[2] = c * c;
    for (int i = 0; i  3; i++)
    {
    s4 = itoa(d, ch, 10);
    if (s4.size() == 1)
    s4 = '0' + s4;
    s1 = s1 + s4;
    }
    s2 = s2 + s1[0] + s1[2] + s1[4];
    s3 = s3 + s1[1] + s1[3] + s1[5];
    t1 = atoi(s2.c_str());
    t2 = atoi(s3.c_str());
    if (issqr(t1) && issqr(t2))
    {
    nn = t1 * 1000+t2;
    return 1;
    }
    return 0;
    }

    int issqr(int x)
    /* TODO (#1#): 判断一个数a是不是完全平方数,如9=3*3
    */
    {
    int n;
    n = (int)sqrt(x);
    return (n *n == x);
    }

    int Mihe(int x)
    /* TODO (#1#): 各位数的幂和
    如153,3得到1^3+5^3+3^3 */
    {
    int t, i, m = 0, n;
    n = (int)log10(x) + 1;
    while (x)
    {
    t = x % 10;
    x /= 10;
    m += (int)pow((double)t, n);
    }
    return m;
    }

    void z24()
    /* TODO (#1#): 一个n位数,其各位数的幂和等于他自身
    如153=1^3+5^3+3^3
    找出这样的数 */
    {
    cout  "一个n位数,其各位数的幂和等于他自身"  endl;
    int i, j, k, m;
    for (j = 3; j  7; j++)
    {
    cout  "n为 "  j  " 时:"  endl;
    k = (int)pow(10.0, j - 1);
    m = (int)pow(10.0, j);
    ;
    for (i = k; i  m; i++)
    if (i == Mihe(i))
    cout  i  endl;
    }
    return ;
    }

    inline int addYinZi(int x)
    /* TODO (#1#): 得到一个数的因子之和 */


    {
    int y, i;
    y = 0;
    for (i = 1; i = x / 2; i++)
    if (!(x % i))
    y += i;
    return y;
    }

    void z25()
    /* TODO (#1#): 数学家发现有这样一种数,它的约数(不含它本
    身)的和恰好等于它本身。如6=1+2+3,
    28=1+2+4+7+14。具有这种性质的第三个数是496
    ,第四个数是8128……。人们把这样的数叫做完全
    数。
    我们可以观察提供给我们的四个完全数6、28
    、496、8128,这四个数都是偶数,而且个位上
    的数都是6或8,我们可以这样猜想,第五个完全
    数的完全数乃至所有的完全数可能都是偶数,而
    且个位上的数可能都是6或8。接着,我们可以再
    观察6、8、28、496、8128的约数:6的约数有1
    、2、3、6;28的约数有1、2、4、7、14、28;
    496的约数有1、2、4、8、16、31、62、124、
    248、496;8128的约数有1、2、4、8、16、32、
    64、127、254、508、1016、2032、4064、8128
    。我们把这四组约数看成四个数列,从小到大看
    ,从大到小看,再对比每相邻两个数之间的关系
    ,可以发现,它们之间的关系几乎都是后一个数
    是前一个数的2倍,只有处在最中间的2和3,4和
    7,16和31,64和127不是这种关系。我们再研究
    这四组数,可以发现:2×3=6,4×7=28,16×31
    =496,64×127=8128;而且这四组乘法算式的
    两个因数都是一个偶数和一个奇数。再观察四个
    偶数,可以发现,2=2^1,4=2^2,16=2^4,64=
    2^6。而四个奇数都是质数,且3=2^2-1,7=2^3
    -1,31=2^5-1,127=2^7-1。这样,我们可以
    进一步猜想,完全数可以分解成两个因数,其中
    一个因数是2的若干次方,另一个因数是2的若干
    次方减去1的差,并且是质数。
    完全数的特点:
    是2^(n-1)×(2^n-1),且2^n-1是质数,前四个完
    全数可以这样表示:6=2^(2-1)×(2^2-1);28=
    2(3-1)×(2^3-1);496=2(5-1)×(2^5-1);
    8128=2^(7-1)×(2^7-1)。那么下一个完全数是
    多少呢?必须找到下一个(2^n-1)是质数,它
    就是2^13-1=8191,那么第五个完全数是2^(13-1)×
    (2^13-1)=4096×8191=33550336。
    目前,人们通过分布式计算已经找到44个梅森素数,
    */

    /*****************************************************************/

    {
    cout  "1000000000以内的梅森素数有:"  endl;
    unsigned long num = 0;
    int m, t = 0;
    fillve2();
    while (num  1000000000)
    {
    m = YinZi::ve2[t++];
    num = (int)pow(2.0, m) - 1;
    if (isMPrime(m, num))
    //if(isPrime(num))
    cout  "2^"  m  "-1="  num  endl;
    }
    }

    void z26()
    /*****************************************************************



    计算相亲数
    说明:相亲数是指两个数x,y,数x的因子之和正好等于y,
    而数y的因子之和正好等于x 。
    *****************************************************************/
    {
    int num, m;
    double cl1, cl2;
    const int MAX = 400000;
    int m1, k, n = 1;
    vector  int  ve1;
    ve1.reserve(MAX);
    fillve2();
    cl1 = clock() / CLOCKS_PER_SEC;
    cout  "400000以内的相亲数有:"  endl;
    ve1.push_back(0);
    for (num = 1; num  MAX; num++)
    {
    m1 = YinZi::addYinZi(num);
    ve1.push_back(m1);
    if (m1  num)
    {
    k = ve1[m1];
    if (k == num)
    {
    cout  n++  ":";
    cout.width(8);
    cout  k  ends  m1  endl;
    }
    }
    }
    cl2 = clock() / CLOCKS_PER_SEC;
    cout  "消耗"  cl2 - cl1  "秒"  endl;
    }

    void z27()
    /* TODO (#1#): 自守数(Automorphic Number):一个数的任意次幂
    的末几位数字等于这个数本身。在十进制,5、6
    、25、76、376、625都是自守数。
    在k位数中,最多有两个自守数,一个个位数字
    为5,另一个个位数字为6。
    一个形式为n=0(mod 2^k),n=1(mod 5^k) ;另一个
    形式为n=1(mod 2^k),n=0(mod 5^k) 。其和必定为
    10^k+1。 */
    {
    cout  "第十位自守数是:"  auton(10)  endl;
    return ;
    }

    void z28()
    /* TODO (#1#): 数11的平方121是回文数
    找出这样的数 */
    {
    cout  "平方是回文数的数有:"  endl;
    int i;
    long j;
    for (i = 1; i  12000; i++)
    {
    j = i * i;
    if (HueiWen(j) == j)
    {
    cout.width(6);
    cout  i  ends  j  endl;
    }
    }
    return ;
    }

    void z29()
    /* TODO (#1#): 3025这样的数
    有(30+25)^2=3025
    找出这样的数 */
    {
    cout  "3025这样的数有(30+25)^2=3025"  endl;
    cout  "类似这样的数有"  endl;
    int i;
    long j, m;
    for (i = 1000; i  10000; i++)
    {
    j = i / 100;
    m = i % 100;
    if ((j + m)*(j + m) == i)
    cout  i  endl;
    }
    return ;
    }

    int isPrime(const long x)
    /* TODO (#1#): 用最慢的试除法验证一个数是不是素数 */
    {
    if (x == 2)
    return 1;
    if (x % 2 == 0)
    return 0;
    for (int i = 3; i = sqrt(x); i += 2)
    if (!(x % i))
    return 0;
    return 1;
    }

    void fillve2()
    /* TODO (#1#): 填充1~1000里的素数到ve2用于 26题*/
    {
    YinZi::ve2.clear();
    for (int i = 3; i  1000; i += 2)
    {
    if (isPrime(i))
    YinZi::ve2.push_back(i);
    }
    }

    int isMPrime(int m, long num)
    /* TODO (#1#): 用专门用来测试梅森素数的测试方法测试他是否
    是素数 */
    {
    unsigned __int64 n = 4;
    for (int i = 0; i  m - 2; i++)
    n = ((n)*(n) - 2) % num;
    return (n == 0);
    }

    long auton(int n)
    /* TODO (#1#): 计算1~10位自守数 ,超过10将得到错误结果*/
    {
    if (n == 1)
    return 6;
    int i;
    long j, m, k, p;
    long nn;
    k = (long)pow(10.0, n - 1);
    p = auton(n - 1);
    for (i = 0; i  10; i++)
    {
    nn = i * k + p;
    j = (int)pow(2.0, n);
    m = (int)pow(5.0, n);
    if ((nn % j == 0) && (nn % m == 1))
    break;
    }
    return nn;
    }
    /*《c趣味编程》30-35题
    */
    #include cstdlib
    #include iostream
    #include cmath
    #include set
    #include vector
    #include ctime
    using namespace std;
    int isPrime(const long);
    void z30();
    void z31();
    void z32();
    void z33();
    void z34();
    void z35();
    long HueiWen(const long);
    //以下是第35题用到的函数
    class SushuHuanFang
    {
    string zz[1000];
    set  int  se2;
    set  int  se3;
    set  int  se4;
    set  string  se1;
    long is13(const long);
    int isTwo(const int, const int);
    int isThree(const int, const int, const int);
    int isFour(const int, const int, const int, const int);
    int isHueiPrime(const int);
    string sts(const string, const int);
    string ntos(const int x);
    public:
    vector  string  mm2;
    SushuHuanFang();
    int FillArray();
    //SushuHuanFang(int x);
    virtual ~SushuHuanFang();
    };
    int main()
    {
    z30();
    system("PAUSE");
    z31();
    system("PAUSE");
    z32();
    system("PAUSE");
    z33();
    system("PAUSE");
    z34();
    system("PAUSE");
    z35();
    system("PAUSE");
    return EXIT_SUCCESS;
    }

    /* TODO (#1#): 用最慢的试除法验证一个数是不是素数 */
    int isPrime(const long x)
    {
    if (x == 2)
    return 1;
    if (x % 2 == 0)
    return 0;
    for (int i = 3; i = sqrt(x); i += 2)
    if (!(x % i))
    return 0;
    return 1;
    }

    /*****************************************************************
    计算素数
    说明:素数是指一个数只有1和他本身两个因子的数
    *****************************************************************/
    void z30()
    {
    cout  "10000以内的素数是:"  endl;
    long i;
    int n = 0;
    for (i = 2; i  10000; i++)
    if (isPrime(i))
    {
    if (!(n % 11))
    cout  endl;
    n++;
    cout.width(7);
    cout  i;
    }
    return ;
    }

    /*****************************************************************
    验证哥德巴赫猜想
    说明:哥德巴赫猜想是指任何一个大于6的偶数可以分解成两个素数的和
    *****************************************************************/
    void z31()
    {
    long i, j;
    int n = 1;
    cout  "验证哥德巴赫猜想"  endl;
    for (i = 6; i  1000; i += 2)
    for (j = 3; j  i; j += 2)
    if (isPrime(j))
    if (isPrime(i - j))
    {
    cout.width(7);
    cout  i  "="  j  "+"  i - j;
    if (!(n % 5))
    cout  endl;
    n++;
    break;
    }
    return ;
    }

    /*****************************************************************
    计算可逆素数
    说明:可逆素数是指一个数abcdef……和他的回文数……fedcba都是素数的数
    同时 abcdef……小于他的回文数
    *****************************************************************/
    void z32()
    {
    const int MAX = 10;
    //max是一行显示几个
    const long MMAX = 100000;
    //MMAX以内的回文素数是:;
    long i, j;
    int n = 0;
    cout  MMAX  "以内的回文素数是:";
    for (i = 3; i  MMAX; i++)
    {
    j = HueiWen(i);
    if (isPrime(i) && isPrime(j) && i  j)
    {
    if (!(n % MAX))
    cout  endl;
    n++;
    cout.width(6);
    cout  i;
    }
    }
    return ;
    }

    /*****************************************************************
    计算回文素数
    说明:回文素数是指一个数abcdef……和他的回文数……fedcba都是素数的数
    同时 abcdef……等于他的回文数……fedcba
    *****************************************************************/
    void z33()
    {
    const int MAX = 10;
    //max是一行显示几个
    const long MMAX = 100000;
    //MMAX以内的回文素数是:;
    long i, j;
    int n = 0;
    cout  MMAX  "以内的回文素数是:";
    for (i = 3; i  MMAX; i++)
    {
    j = HueiWen(i);
    if (isPrime(i) && isPrime(j) && i == j)
    {
    if (!(n % MAX))
    cout  endl;
    n++;
    cout.width(6);
    cout  i;
    }
    }
    return ;
    }

    /*****************************************************************
    问题:将不超过1993的素数(包括2)从小到大排成 一行
    第二行上每个数都是他的右边肩头的数与左边肩头的数的差
    第二行是否存在若干连续的数学他们的和是1898
    说明:其实问题就是求两个素数的差是1898
    *****************************************************************/
    void z34()
    {
    long i, j;
    int n = 1;
    for (i = 3; i  100; i++, j = i + 1898)
    if (isPrime(i) && isPrime(j))
    {
    cout  "("  n  "):"  i  "... ..."  j  endl;
    n++;
    }
    return ;
    }

    /*****************************************************************
    问题:计算回文素数幻方.
    回文素数幻方是一个4*4的数组,其中横线竖线和斜线10条线全部是 回文素数
    这个程序首先得到第一,二,四行的数,然后通过 第一,二,四行的数
    得到 第三行的数,然后判断 第三行的数和斜线三数是不是 回文素数,
    所以程序非常快。
    说明:如结果
    1933
    9133
    1789
    3391
    横线四数1933,9133,1789,3391和
    竖线四数1913,9773,3389,3391和
    斜线二数1181,3373均是 回文素数
    *****************************************************************/
    void z35()
    {
    cout  "计算回文素数幻方."  endl;
    SushuHuanFang j;
    int i;
    j.FillArray();
    for (i = 0; i  j.mm2.size(); i++)
    cout  "("  i + 1  "):"  j.mm2  endl;
    return ;

    }

    /* TODO (#1#): 得到一个数的回文数 */
    long HueiWen(const long x1)
    {
    const int TEN = 10;
    int m = 0;
    long x = x1;
    while (x)
    {
    m = m * TEN + x % TEN;
    x /= TEN;
    }
    return m;
    }

    string SushuHuanFang::ntos(const int x1)
    {
    /* TODO (#2#): 数字变成字符串 */
    string s1;
    char ch[4];
    s1 = itoa(x1, ch, 10);
    return s1;
    }

    string SushuHuanFang::sts(const string s2, const int i = 0)
    {
    /* TODO (#2#): 通过一个解旋转变换另一个解 */

    string s3 = "";
    switch (i)
    {
    case 0:
    s3 = s3 + s2[12] + s2[8] + s2[4] + s2[0] + s2[13] + s2[9] + s2[5] +
    s2[1] + s2[14] + s2[10] + s2[6] + s2[2] + s2[15] + s2[11] +
    s2[7] + s2[3];
    break;
    case 2:
    s3 = s3 + s2[3] + s2[2] + s2[1] + s2[0] + s2[7] + s2[6] + s2[5] +
    s2[4] + s2[11] + s2[10] + s2[9] + s2[8] + s2[15] + s2[14] +
    s2[13] + s2[12];
    break;
    }
    return s3;
    }

    long SushuHuanFang::is13(const long x1)
    {
    /* TODO (#2#): 判断是否是一个各位数是1379的数
    */
    int t, i;
    long x = x1;
    while (x)
    {
    t = x % 10;
    if (t % 2 == 0 || t == 5)
    return 0;
    x /= 10;
    }
    return 1;
    }

    int SushuHuanFang::isHueiPrime(const int x)
    {
    /* TODO (#3#): 判断一个数是否是四位回文素数 */
    if (x  1000)
    return 0;
    if (isPrime(x) && isPrime(HueiWen(x)))
    return 1;
    return 0;
    }

    int SushuHuanFang::isThree(const int x, const int y, const int z)
    {
    string s1, s2, s3, s4, s5;
    char ch[6];
    s1 = itoa(x, ch, 10);
    s2 = itoa(y, ch, 10);
    s5 = itoa(z, ch, 10);



    for (int i = 0; i  4; i++)
    {
    s3 = s4 + s1 + s2 + s5;
    if (se3.find(atoi(s3.c_str())) == se3.end())
    return 0;
    }
    return 1;
    }

    int SushuHuanFang::isFour(const int x, const int y, const int z, const int t)
    {
    string s1, s2, s3, s4, s5, s6;
    char ch[6];
    s1 = itoa(x, ch, 10);
    s2 = itoa(y, ch, 10);
    s5 = itoa(z, ch, 10);
    s6 = itoa(t, ch, 10);
    for (int i = 0; i  4; i++)
    {
    s3 = s4 + s1 + s2 + s5 + s6;
    if (se4.find(atoi(s3.c_str())) == se4.end())
    return 0;
    }
    s3 = s4 + s1[0] + s2[1] + s5[2] + s6[3];
    if (se4.find(atoi(s3.c_str())) == se4.end())
    return 0;
    s3 = s4 + s1[3] + s2[2] + s5[1] + s6[0];
    if (se4.find(atoi(s3.c_str())) == se4.end())
    return 0;
    return 1;
    }

    int SushuHuanFang::isTwo(const int x, const int y)
    {
    string s1, s2, s3, s4;
    //if(!is13(x))return 0;
    char ch[6];
    s1 = itoa(x, ch, 10);
    s2 = itoa(y, ch, 10);
    for (int i = 0; i  4; i++)
    {
    s3 = s4 + s1 + s2;
    if (se2.find(atoi(s3.c_str())) == se2.end())
    return 0;
    }
    s3 = s4 + s1[0] + s2[1];
    if (se2.find(atoi(s3.c_str())) == se2.end())
    return 0;
    s3 = s4 + s1[3] + s2[2];
    if (se2.find(atoi(s3.c_str())) == se2.end())
    return 0;
    return 1;
    }

    int SushuHuanFang::FillArray()
    {
    double cl1, cl2;
    vector  int  ve1, ve2;
    string s2, s3, s4;
    string mm1;
    cl1 = clock() / CLOCKS_PER_SEC;
    for (int i = 1001, n = 0; i  9999; i += 2)
    {
    if (isPrime(i) && isPrime(HueiWen(i)))
    {
    ve1.push_back(i);
    se2.insert(i / 100);
    se3.insert(i / 10);
    se4.insert(i);
    if (is13(i))
    {
    /* TODO (#1#):
    因为第一行和第四行的数字的各数只能是1,3,7,9
    */
    ve2.push_back(i);
    }
    }
    }
    //for(int i=0;ive2.size();i++)coutiendsve2endl;
    //coutse2.size()endsse3.size()endl;
    /* TODO (#1#): 上面填充数组ve2,ve1保存所有的回文素数 */
    int k = 0;
    //因为已经知道答案只有17个所以有 mm2.size()!=17
    for (int i = 0; i  ve2.size() && mm2.size() != 17; i++)
    if (HueiWen(ve1)  ve1)
    for (int j = 0; j  ve1.size(); j++)
    if (isTwo(ve2, ve1[j]))
    for (int m = 0; m  ve1.size(); m++)
    if (isThree(ve2, ve1[j], ve1[m]))
    for (int mt = 0; mt  ve2.size(); mt++)
    if (isFour(ve2, ve1[j], ve1[m], ve2[mt]))
    {
    s2 = ntos(ve2) + ntos(ve1[j]) + ntos(ve1[m]) + ntos(ve2[mt]);
    if (se1.find(s2) == se1.end())
    {
    mm2.push_back(s2);
    cout  "...";
    s3 = sts(s2);
    s4 = sts(s3, 2);
    se1.insert(s4);
    se1.insert(s3);
    s3 = sts(s3);
    s4 = sts(s3, 2);
    se1.insert(s4);
    se1.insert(s3);
    s3 = sts(s3);
    s4 = sts(s3, 2);
    se1.insert(s4);
    se1.insert(s3);
    s3 = sts(s3);
    s4 = sts(s3, 2);
    se1.insert(s4);
    //se1.insert(s3);
    //八个 通过变换得到的解只有这个可以去掉

    }
    }
    /* TODO (#2#): 上面填充数组mm2,mm2保存所有合适的解 */
    cl2 = clock() / CLOCKS_PER_SEC;
    cout  "消耗"  cl2 - cl1  "秒"  endl;
    return 1;

    }

    SushuHuanFang::SushuHuanFang(){

    }
    SushuHuanFang::~SushuHuanFang(){

    }
    /*《c趣味编程》36-41题
    */

    #include cstdlib
    #include iostream
    using namespace std;
    int z36();
    int z37();
    int z38();
    int z39();
    int z40();
    int z41();
    int main()
    {
    z36();
    system("PAUSE");
    z37();
    system("PAUSE");
    z38();
    system("PAUSE");
    z39();
    system("PAUSE");
    z40();
    system("PAUSE");
    z41();
    system("PAUSE");
    return EXIT_SUCCESS;
    }

    int z36()
    /* TODO (#1#): 解不定方程
    x+y+z=100
    5*x+3*y+z/3=100
    x,y,z都是整数并且大于0 */
    {
    cout  "不定方程"  endl  "x+y+z=100"  endl  "5*x+3*y+z/3=100"  
    endl  "的解是"  endl;
    int i, j;
    int n = 0;
    for (i = 0; i  20; i++)
    for (j = 0; j  33; j++)
    {
    n = 100-i - j;
    if (!(n % 3) && (i *5+3 * j + n / 3 == 100))
    cout  "x="  i  ends  "y="  j  ends  "z="  n  endl;
    }
    return 1;
    }

    int z37()
    /* TODO (#1#): 解同余方程
    x=1(mod 2)
    x=2(mod 3)
    x=4(mod 5)
    x=5(mod 6)
    x=0(mod 7) */
    {
    int x = 0;
    int ar[2][5] =
    {
    {
    1, 2, 4, 5, 0
    }
    ,
    {
    2, 3, 5, 6, 7
    }
    };
    int w;
    do
    {
    w = 1;
    for (int i = 0; i  5; i++)
    w = w && (x % ar[1]) == ar[0];
    x++;
    }
    while (!w);
    cout  "同余方程的解是: "  x - 1  endl;
    return 1;
    }

    int z38()
    /* TODO (#1#): 解方程x*5+y*2+z=100 */
    {
    int i, j, m, n = 0;
    for (i = 1; i  20; i++)
    for (j = 1; j  50; j++)
    {
    m = 100-i * 5-j * 2;
    if (m  0)
    {
    cout  n  ":x="  i  ends  "y="  j  ends  "z="  m
     endl;
    n++;
    }
    }
    return 1;
    }

    int z39()
    /* TODO (#1#): 四数成等差数列
    并且他们的和是26
    积是880
    输出有二十项的上面的等差数列 */
    {
    for (int i = 1; i = 3; i++)
    {
    int j;
    j = (26-6 * i);
    if (!(j % 4))
    {
    j /= 4;
    if (j *(j + i)*(j + 2 * i)*(j + 3 * i) == 880)
    {
    cout  "等差数列的首项和公差分别是:"  endl;
    cout  i  ends  j  endl;
    cout  "等差数列的前二十项是:"  endl;
    for (int n = 0; n  20; n++)
    cout  j + n * i  ends;
    }
    }
    }
    return 1;
    }

    int z40()
    /* TODO (#1#): 口袋里有12个东西
    其中3红,3黑,6绿
    任取八个有多少不同的颜色搭配 */
    {
    cout  "口袋里有12个东西其中3红,3黑,6绿任取八个的取法是"  endl;
    int i, j, m, n = 1;
    for (i = 0; i = 3; i++)
    for (j = 0; j = 3; j++)
    {
    m = 8-i - j;
    if (m = 6)
    {
    cout  n  ":"  i  ends  j  ends  m  endl;
    n++;
    }
    }
    return 1;
    }

    int z41()
    /* TODO (#1#): 解方程
    x+y+z=30
    3*x+2*y+z=50 */
    {
    cout  "不定方程"  endl  "x+y+z=30"  endl  "3*x+2*y+z=50"  endl
     "的解是"  endl;
    int i, j, m, n = 1;
    for (i = 0; i = 10; i++)
    {
    j = 20-2 * i;
    m = 30-j - i;
    if (3 *i + 2 * j + m == 50)
    {
    cout  n  ":"  i  ends  j  ends  m  endl;
    n++;
    }
    }
    return 1;
    }




    /*
    Name: 第七章----逻辑推理与判断
    Description: 《c趣味编程》48-57题
    */
    #include cstdlib
    #include iostream
    #include string
    #include bitset
    #include vector
    using namespace std;
    void z48();
    void z49();
    void z50();
    void z51();
    int isHere(int, int, int, int, int, int);
    void z52();
    int isHere(int, int, int, int, int);
    void z53();
    void z54();
    void z55();
    void z56();
    void z57();
    int main()
    {
    z48();
    system("PAUSE");
    z49();
    system("PAUSE");
    z50();
    system("PAUSE");
    z51();
    system("PAUSE");
    z52();
    system("PAUSE");
    z53();
    system("PAUSE");
    z54();
    system("PAUSE");
    z55();
    system("PAUSE");
    z56();
    system("PAUSE");
    z57();
    system("PAUSE");
    return EXIT_SUCCESS;
    }

    /* TODO (#1#): 新郎与新娘
    x不与a结婚
    m1[0]!=0
    x不与c结婚
    m1[0]!=2
    z不与c结婚
    m1[2]!=2
    一对一的关系
    m1[0]!=m1[1] &&m1[1]!=m1[2] &&m1[2]!=m1[0]
    */
    void z48()
    {
    string s12 = " 结婚 ";
    vector  int  v1;
    for (int i = 0; i  3; i++)
    v1.push_back(i);
    while (next_permutation(v1.begin(), v1.end()))
    {
    if (v1[0] != 0 && v1[0] != 2 && v1[2] != 2)
    for (int i = 0; i  3; i++)
    cout  (char)('X' + i)  s12  (char)('A' + v1)  endl;
    }
    return ;
    }

    /* TODO (#1#): 六个人按照条件挑选去和留,条件是
    a和b至少去一个人
    m1[0]+m1[1]1
    a和d不能一起去
    m1[0]+m1[3]!=2
    a,e,f三人里要去两人
    m1[0]+m1[4]+m1[5]==2
    b和c都去 或者 都不去
    (m1[1]+m1[2]==0 || m1[1]+m1[2]==2)
    c和d两人中只去一个
    m1[2]+m1[3]==1
    如果d不去则e也不去
    (m1[3]+m1[4]==0 || m1[3]==1)
    */
    void z49()
    {
    string s11[2] =
    {
    "不去", "去"
    }
    , s12 = " 将会";
    for (int j = 0; j = 64; j++)
    {
    bitset  6  m1(j);
    //abcdef
    //012345
    if (m1[0] + m1[1]  1 && m1[0] + m1[3] != 2 && m1[0] + m1[4] + m1[5] ==
    2 && (m1[1] + m1[2] == 0 || m1[1] + m1[2] == 2) && m1[2] + m1[3] ==
    1 && (m1[3] + m1[4] == 0 || m1[3] == 1))
    for (int i = 0; i  6; i++)
    cout  (char)('A' + i)  s12  s11[m1]  endl;
    }
    return ;
    }

    /* TODO (#1#): 谁在说谎
    a说b在说谎
    (m1[0]&&!m1[1]|| ! m1[0]&&m1[1])
    b说c在说谎
    (m1[2]&&!m1[1]|| ! m1[2]&&m1[1])
    c说a和b都在说谎
    (m1[2]&&m1[0]+m1[1]==0 || !m1[2]&&m1[0]+m1[1]!=0)
    问他们谁在说真话谁在说谎 */

    void z50()
    {
    string s11[2] =
    {
    "说谎者", "诚实者"
    }
    , s12 = " 是 ";
    for (int j = 1; j = 8; j++)
    {
    bitset  3  m1(j);
    //abcdef
    //012345
    if ((m1[0] && !m1[1] || !m1[0] && m1[1]) && (m1[2] && !m1[1] || !m1[2]
    && m1[1]) && (m1[2] && m1[0] + m1[1] == 0 || !m1[2] && m1[0] +
    m1[1] != 0))
    for (int i = 0; i  3; i++)
    cout  (char)('A' + i)  s12  s11[m1]  endl;
    }
    return ;
    }

    /* TODO (#1#): 四个被怀疑是小偷的人被抓了,知道他们中只有
    一个小偷 (m1[0]+m1[1]+m1[2]+m1[3]==1)
    a说 b没有偷 是 d偷的
    (m1[3]+m1[1]==1)
    b说 b没有偷 是 c偷的
    (m1[1]+m1[2]==1)
    c说 a 没有偷 是 b偷的
    (m1[0]+m1[1]==1)
    已知 三人要么说真话要么说假话
    问谁偷的
    */

    void z51()
    {
    string s11[2] =
    {
    "非贼", "贼"
    }
    , s12 = " 是";
    for (int j = 1; j = 16; j++)
    {
    bitset  4  m1(j);
    //abcd
    //0123
    if ((m1[0] + m1[1] + m1[2] + m1[3] == 1) && (m1[1] + m1[2] == 1) &&



    (m1[3] + m1[1] == 1) && (m1[0] + m1[1] == 1))
    for (int i = 0; i  3; i++)
    cout  (char)('A' + i)  s12  s11[m1]  endl;
    }
    return ;
    }

    /* TODO (#1#): 黑与蓝
    五个人,帽子上贴着黑与蓝的标签。黑的说谎,
    蓝色的说真话,他们这样说:
    a说他看见3个蓝的标签(不包括他自己)
    如果他是真话那么有a=1
    b+c+d+e=3
    如果他是假话那么有!a=1
    b+c+d+e!=3
    也就是
    a&& b+c+d+e==3 || !a && b+c+d+e!=3
    b说有0个,c说有1个,d说有4个
    */

    void z52()
    {
    string s11[2] =
    {
    "黑色", "蓝色"
    }
    , s12 = " 是 ";
    for (int j = 0; j  32; j++)
    {
    bitset  5  m1(j);
    //abcdef
    //012345
    if (isHere(m1[0], m1[1], m1[2], m1[3], m1[4], 3) && isHere(m1[1], m1[0],
    m1[2], m1[3], m1[4], 0) && isHere(m1[2], m1[0], m1[1], m1[3], m1[4],
    1) && isHere(m1[3], m1[0], m1[1], m1[2], m1[4], 4))
    {
    for (int i = 0; i  5; i++)
    cout  (char)('A' + i)  s12  s11[m1]  endl;
    }
    }
    return ;
    }

    int isHere(int x, int y, int a, int b, int c, int d)
    {
    int i;
    i = (x && y + a + b + c == d) || (!x && y + a + b + c != d);
    return i;
    }

    /* TODO (#1#): 三人要么说谎要么说真话
    a说有2个是说真话的
    b和c都说 有1个说真话的
    和上一题一样
    (x && y+a+b==d) ||
    (!x && y+a+b!=d)
    */

    void z53()
    {
    string s11[2] =
    {
    "说谎者", "诚实者"
    }
    , s12 = " 是 ";
    for (int j = 0; j  8; j++)
    {

    楼主 2016-02-12 14:23 回复

共有回帖数 0
  • 回 帖
  • 表情 图片 视频
  • 发表

登录直线网账号

Copyright © 2010~2015 直线网 版权所有,All Rights Reserved.沪ICP备10039589号 意见反馈 | 关于直线 | 版权声明 | 会员须知