zoukankan      html  css  js  c++  java
  • 枚举题——四大明湖排序(本菜优化了一下)

    上题:

    A:洞庭最大,洪泽最小,鄱阳第三
    B:洪泽最大,洞庭最小,鄱阳第二,太湖第三
    C:洪泽最小,洞庭第三
    D:鄱阳最大,太湖最小,洪泽第二,洞庭第三

    分析:

    (1)

    用a,b,c,d分别表示四个湖的排序。A表示洞庭,b表示洪泽,c表示鄱阳,d表示太湖。
    A学生的回答可表示为:a==1 && b==4 && c==3
    B学生的回答可表示为:a==4 && b==1 && c==2 && d==3
    C学生的回答可表示为:a==3 && b==4
    D学生的回答可表示为:a==3 && b==2 && c==1 && d==4
    (2)

    由于每位学生都只说对了一个,因此每位同学的若干个关系表达式中只有一个为真,其余都为假。因此,
    对A同学:((a==1) + ( b==4) + ( c==3)) == 1
    对B同学:((a==4) + ( b==1) + ( c==2) + ( d==3)) == 1
    对C同学:((a==3) + ( b==4)) == 1
    对D同学:((a==3) + ( b==2) + ( c==1) + (d==4)) == 1
    本题的答案就是找同时满足上面四个条件的答案

    ------------------------------------------------------------------------------------------------

    方法一(传统的枚举方法)

     1 # include<stdio.h>
     2 # include<iostream>
     3 int main()
     4 {
     5     int dongting;
     6     int hongze;
     7     int boyang;
     8     int tai;
     9     int A;
    10     int B;
    11     int C;
    12     int D;
    13     for(dongting=1; dongting<5; dongting++)
    14     {
    15         for(hongze=1; hongze<5; hongze++)
    16         {
    17             for(boyang=1; boyang<5; boyang++)
    18             {
    19                 for(tai=1; tai<5; tai++)
    20                 {
    21                     //todo
    22                     A= ( (dongting==4) + (hongze==1) + (boyang==3) );
    23                     B= ( (hongze==4) + (dongting==1) + (boyang==2) + (tai==3));
    24                     C= ( (hongze==1) + (dongting==3));
    25                     D= ( (boyang==4) + (tai==1) + (hongze==2) + (dongting==3));
    26                     if( (A==1) && (B==1) && (C==1) && (D==1) )
    27                     {
    28                         if(dongting!=tai&&dongting!=hongze&&dongting!=boyang&&tai!=hongze&&tai!=boyang&&hongze!=boyang)
    29                         {
    30                             printf("dongting=%d
    ",dongting);
    31                             printf("hongze=%d
    ",hongze);
    32                             printf("tai=%d
    ",tai);
    33                             printf("boyang=%d
    ",boyang);
    34                         }
    35                     }
    36                 }
    37             }
    38         }
    39     }
    40 
    41     return 0;
    42 }
    View Code

    方法二(优化了一下)

     1 # include<iostream>
     2 using namespace std;
     3 int main()
     4 {
     5     int a, b, c, d;
     6     for (a=1; a<=4; ++a)
     7         for (b=1; b<=4; ++b)
     8             if ( a == b)
     9                 continue;
    10             else
    11                 for (c=1; c<=4; ++c)
    12                     if (c==a||c==b)
    13                         continue;
    14                     else
    15                     {
    16                         d=10-a-b-c;
    17                         if (((a==1)+(b==4)+(c==3))==1
    18                                 &&((b==1)+(a==4)+(c==2)+(d==3))==1
    19                                 &&((b==4)+(a==3))==1
    20                                 &&((c==1)+(d==4)+(b==2)+(a==3))==1)
    21                             cout << a << b << c << d;
    22                     }
    23 }
    View Code

    方法三(再优化了一下)

     1 # include<iostream>
     2 using namespace std;
     3 int main()
     4 {
     5     int a, b, c, d;
     6     bool flag = false;
     7     for (a=1; a<=4; ++a)
     8     {
     9         for (b=1; b<=4; ++b)
    10         {
    11             if ( a == b) continue;
    12             else for (c=1; c<=4; ++c)
    13                     if (c==a||c==b) continue;
    14                     else
    15                     {
    16                         d=10-a-b-c;
    17                         if (((a==1)+(b==4)+(c==3))==1
    18                                 &&((b==1)+(a==4)+(c==2)+(d==3))==1
    19                                 &&((b==4)+(a==3))==1
    20                                 &&((c==1)+(d==4)+(b==2)+(a==3))==1)
    21                         {
    22                             cout << a << b << c << d;
    23                             flag = true;
    24                             break;
    25                         }
    26                     }
    27             if  (flag) break;
    28         }
    29         if (flag) break;
    30     }
    31 }
    View Code

    方法四(再优化了一下)

     1 # include<iostream>
     2 using namespace std;
     3 int main()
     4 {
     5     int a, b, c, d;
     6     bool flag = false;
     7     for (a=1; a<=4 && !flag; ++a)
     8     {
     9         for (b=1; b<=4 && !flag; ++b)
    10         {
    11             if ( a == b) continue;
    12             else for (c=1; c<=4 ; ++c)
    13                     if (c==a||c==b) continue;
    14                     else
    15                     {
    16                         d=10-a-b-c;
    17                         if (((a==1)+(b==4)+(c==3))==1
    18                         &&((b==1)+(a==4)+(c==2)+(d==3))==1
    19                         &&((b==4)+(a==3))==1
    20                         &&((c==1)+(d==4)+(b==2)+(a==3))==1)
    21                         {
    22                             cout << a << b << c << d;
    23                             flag = true;
    24                             break;
    25                         }
    26                     }
    27         }
    28     }
    29 }
    View Code
  • 相关阅读:
    hdoj--2187--悼念512汶川大地震遇难同胞——老人是真饿了(贪心)
    hdoj--2186--悼念512汶川大地震遇难同胞——一定要记住我爱你(模拟水题)
    yum方式安装nginx
    nginx安装,手动源码安装
    MYSQL数据库的增删改查
    九款Web服务器性能压力测试工具
    mysql数据库忘记root密码怎么办?
    mysql数据库存放的路径以及安装路径
    Windows配置java环境
    OSPF路由协议详解
  • 原文地址:https://www.cnblogs.com/sxmcACM/p/3415284.html
Copyright © 2011-2022 走看看