这个题考什么呢,事实上啥也没考,只要会C语言就能做,数据量极小,典型的瞎搞搞题目。
之前觉得写if语句,可能导致程序太臃肿,所以后面搞了几个for循环,然后在用一个flag标志量,再break几下,结果呢。把程序搞的很复杂。事实上用if语句还是很不错的。一共要写6组。每一组的长度都差不多。
不多说了,代码:
#include <iostream>
#include <string.h>
using namespace std;
char a[15];
int num[15];//如果值为1表明存在这种情况
int main()
{
int t,ans,flag;//flag作为标志量
cin>>t;
while(t--)
{
cin>>a;
memset(num,0,sizeof(num));//每输一次都要初始化一次,被坑了
ans=0;
for(int i=0;i<=11;i++)//至少有一个的情况,这是1x12
{
if(a[i]=='X')
{
ans++;//总数加1
num[1]=1;
break;
}
}
//这是2x6的情况
if((a[0]==a[6]&&a[0]=='X')||(a[1]==a[7]&&a[1]=='X')||(a[2]==a[8]&&a[2]=='X')||(a[3]==a[9]&&a[3]=='X')||(a[4]==a[10]&&a[4]=='X')||(a[5]==a[11]&&a[5]=='X'))
{
ans++;
num[2]=1;
}
flag=0;
//这是3x4
for(int i=0;i<=3;i++)
{
if(a[i]=='X')
{
for(int j=1;j<=2;j++)
{
if(a[i]==a[i+4*j])
flag=1;
else
{
flag=0;
break;
}
}
}
if(flag==1)
break;
}
if(flag==1)
{
ans++;
num[3]=1;
}
//这是4x3
flag=0;
for(int i=0;i<=2;i++)
{
if(a[i]=='X')
{
for(int j=1;j<=3;j++)
{
if(a[i]==a[i+3*j])
flag=1;
else
{
flag=0;
break;
}
}
}
if(flag==1)
break;
}
if(flag==1)
{
ans++;
num[4]=1;
}
//这是6x2
flag=0;
for(int i=0;i<=1;i++)
{
if(a[i]=='X')
{
for(int j=1;j<=5;j++)
{
if(a[i]==a[i+2*j])
flag=1;
else
{
flag=0;
break;
}
}
}
if(flag==1)
break;
}
if(flag==1)
{
ans++;
num[6]=1;
}
flag=0;
//这是12x1
if(a[0]=='X')
{
for(int i=0;i<=10;i++)
{
if(a[0]==a[i+1])
flag=1;
else
{
flag=0;
break;
}
}
}
if(flag==1)
{
ans++;
num[12]=1;
}
//最后的结果
cout <<ans<<" ";
for(int i=0;i<=12;i++)
if(num[i]!=0)
cout<<i<<'x'<<12/i<<" ";
cout<<endl;
}
return 0;
}