zoukankan      html  css  js  c++  java
  • OpenJ_Bailian 2814 拨钟问题

    总时间限制: 
    1000ms
     
    内存限制: 
    65536kB
    描述

    有9个时钟,排成一个3*3的矩阵。

    |-------|    |-------|    |-------|
    | | | | | | |
    |---O | |---O | | O |
    | | | | | |
    |-------| |-------| |-------|
    A B C

    |-------| |-------| |-------|
    | | | | | |
    | O | | O | | O |
    | | | | | | | | |
    |-------| |-------| |-------|
    D E F

    |-------| |-------| |-------|
    | | | | | |
    | O | | O---| | O |
    | | | | | | | |
    |-------| |-------| |-------|
    G H I
    (图 1)

    现在需要用最少的移动,将9个时钟的指针都拨到12点的位置。共允许有9种不同的移动。如下表所示,每个移动会将若干个时钟的指针沿顺时针方向拨动90度。


    移动    影响的时钟

    1 ABDE
    2 ABC
    3 BCEF
    4 ADG
    5 BDEFH
    6 CFI
    7 DEGH
    8 GHI
    9 EFHI
    输入
    9个整数,表示各时钟指针的起始位置,相邻两个整数之间用单个空格隔开。其中,0=12点、1=3点、2=6点、3=9点。
    输出
    输出一个最短的移动序列,使得9个时钟的指针都指向12点。按照移动的序号从小到大输出结果。相邻两个整数之间用单个空格隔开。
    样例输入
    3 3 0 
    2 2 2 
    2 1 2 
    样例输出
    4 5 8 9 


    解题思路:9重循环枚举

     1 #include <iostream>
     2 
     3 using namespace std;
     4 
     5 
     6 int main()
     7 {
     8     int clock[10];
     9     for (int i = 1; i <= 9; ++i)
    10         cin >> clock[i];
    11 
    12     int minCnt = 100;    //保存拨动的最小次数
    13     int i1, i2, i3, i4, i5, i6, i7, i8, i9;
    14     int result[10];
    15     for (i1 = 0; i1 <= 3; ++i1)
    16         for (i2 = 0; i2 <= 3; ++i2)
    17             for (i3 = 0; i3 <= 3; ++i3)
    18                 for (i4 = 0; i4 <= 3; ++i4)
    19                     for (i5 = 0; i5 <= 3; ++i5)
    20                         for (i6 = 0; i6 <= 3; ++i6)
    21                             for (i7 = 0; i7 <= 3; ++i7)
    22                                 for (i8 = 0; i8 <= 3; ++i8)
    23                                     for (i9 = 0; i9 <= 3; ++i9)
    24                                     {
    25                                         if ((i1 + i2 + i4 + clock[1]) % 4 == 0 && 
    26                                             (i1 + i2 + i3 + i5 + clock[2]) % 4 == 0 && 
    27                                             (i2 + i3 + i6 + clock[3]) % 4 == 0 && 
    28                                             (i1 + i4 + i5 + i7 + clock[4]) % 4 == 0 && 
    29                                             (i1 + i3 + i5 + i7 + i9 + clock[5]) % 4 == 0 && 
    30                                             (i3 + i5 + i6 + i9 + clock[6]) % 4 == 0 && 
    31                                             (i4 + i7 + i8 + clock[7]) % 4 == 0 && 
    32                                             (i5 + i7 + i8 + i9 + clock[8]) % 4 == 0 && 
    33                                             (i6 + i8 + i9 + clock[9]) % 4 == 0)
    34                                         {
    35                                             int sum = i1 + i2 + i3 + i4 + i5 + i6 + i7 + i8 + i9;
    36                                             if (sum < minCnt)    //如果当前拨动的次数小于最小拨动次数
    37                                             {
    38                                                 minCnt = sum;
    39                                                 result[1] = i1;
    40                                                 result[2] = i2;
    41                                                 result[3] = i3;
    42                                                 result[4] = i4;
    43                                                 result[5] = i5;
    44                                                 result[6] = i6;
    45                                                 result[7] = i7;
    46                                                 result[8] = i8;
    47                                                 result[9] = i9;
    48                                             }
    49                                         }
    50                                     }
    51     
    52     for (int i = 1; i <= 9; ++i)
    53         for (int j = 1; j <= result[i]; ++j)
    54             cout << i << ' ';
    55 
    56     return 0;
    57 }
     
  • 相关阅读:
    JS判断鼠标移入元素的方向
    EJB开发第一个无状态会话bean、开发EJBclient
    Android摇一摇振动效果Demo
    吃饭与团队惬意
    Factorization Machines 学习笔记(三)回归和分类
    代理---视图间数据的传递:标签显示输入的内容【多个视图中】
    cocos2d-x v3.2 FlappyBird 各个类对象详细代码分析(7)
    金典 SQL笔记(4)
    用GDB调试多进程程序
    C程序设计的抽象思维-算法分析-大多数元素
  • 原文地址:https://www.cnblogs.com/FengZeng666/p/10417191.html
Copyright © 2011-2022 走看看