• Codeforces Round #234A


    Inna and choose option

        题意:

    一个由12个字符('O'或'X')组成的字符串,这12个字符可以排列成a*b(a*b=12)的矩阵,要求矩阵某一列都是'X'。用户输入t个字符串,都是由12个'O'或'X组成,设计函数可求解符合要求矩阵的个数,并且将符合要求的矩阵大小输出。

    Input:

    第一行输入一个整数t(Range:1-100),t表示要输入的测试数据的个数,下面每一行输入都是一组数据被录入。

    Output:

    将每组数据的结果放在一行输出,format:n axb axb axb ….

    n表示满足要求的矩阵个数,后面是具体的矩阵大小。

        例如:

            

        解题思路:

        可以看出矩阵个数最大为6,分别是(1,12)(2,6)(3,4)(4,3)(6,2)(12,1),将这些情况枚举出来,然后for循环判断矩阵的每一列,若有一列满足条件(全为'X'),那么将这个矩阵行数列数分别保存到一个6行2列的数组的第一行,k来计数,最后k中存的就是满足条件的矩阵个数,数组里面前k行存的就是具体大小。

        代码:

        
     1 #include <iostream>
     2 using namespace std;
     3 #include <string>
     4 #define MAX 100
     5 
     6 
     7 int main(void)
     8 {
     9     string s[MAX];
    10     int t;
    11     void inna(string card);
    12     cin >> t;
    13     for(int i=0;i<t;i++)
    14     {
    15         cin >> s[i];
    16     }
    17 
    18     for(int i=0;i<t;i++)
    19     {
    20         inna(s[i]);
    21     }
    22     return 0;
    23  } 
    24 
    25 void inna(string card)
    26 {
    27     int i,j,k=0,m;
    28     bool flag = true;
    29     int a[6] = {1,2,3,4,6,12};       // 行数有六中情况
    30     int b[6] = {12,6,4,3,2,1};       // 列数 
    31     int n[6][2];
    32     
    33     if(card == "OOOOOOOOOOOO")         // 12张卡片全为o 
    34     {
    35         cout << k << endl;
    36         return;                      // 结束函数体 
    37     }
    38     
    39     for(i=0;i<6;i++)                 // i表示行数 
    40     {
    41         for(j=0;j<b[i];j++)
    42         {
    43             flag = true;
    44             for(m=0;m<a[i];m++)
    45             {
    46                 if(card[j+m*b[i]]!='X')
    47                 {
    48                     flag = false;
    49                     break;
    50                 }
    51             }
    52 
    53             if(flag)
    54             {
    55                 n[k][0] = a[i];
    56                 n[k][1] = b[i];
    57                 k++;
    58                 break;
    59             }
    60          }
    61      }
    62      
    63      cout << k << ' ';
    64      for(i=0;i<k;i++)
    65      {
    66          cout << n[i][0] << 'x' << n[i][1] << ' ';
    67      }
    68      cout << endl;
    69 }
    C++ Code

        测试结果:

  • 相关阅读:
    C#单例模式的三种写法转载
    silverlight 添加配置项
    oracle 如何实现上一条、下一条、查找不连续的值
    一个IT民工眼中的保障房不能保证公平,赞成取消保障房
    c# where 转载
    进度条 silverlight
    中国软件公司我深表认同:软硬结合
    计算经纬度两点之间的距离(c#)
    如何高效使用SQLITE .NET (C#)
    如何判断系统是否安装了flash插件
  • 原文地址:https://www.cnblogs.com/lxmwb/p/5988196.html
Copyright © 2020-2023  润新知