前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Codeforces Round #234A

Codeforces Round #234A

作者头像
CN_Simo
发布2017-12-26 14:49:37
5480
发布2017-12-26 14:49:37
举报
文章被收录于专栏:Script Boy (CN-SIMO)Script Boy (CN-SIMO)

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行存的就是具体大小。

    代码:

代码语言:javascript
复制
 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 }

    测试结果:

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-10-22 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档