题目:#仓鼠快速签到#
源代码:
#include <stdio.h>
int main()
{
printf("CBABBACCCC\n");
return 0;
}
这道题目我没有使用DFS算法来写(因为刚刚接触,不会)所以我是使用了另外一种电脑判断+人脑判断的方法来完成。首先就是对这道题目进行一个分析,每一个选择题都看一遍,可以发现有一些是独立题(与其他题目的答案无关)有写题目是有关联的(根据其他题目的答案推出这道题的答案的关联题),那么我们可以先通过判断得出独立题的答案,在对关联题的结果进行一个枚举,最后判断是是否符合。
从图中可以基本判断独立题是:8、9、10三个题目,剩下的就是关联题目。其中第9和第10题是可以直接得出答案的(因为网上都有)但是第8题的答案没法知道,所以这里归根到关联题。所以我们就建立一个数组a[11](多建一个是因为下标直接对应题目序号)a[9]和a[10]都赋值为3(1代表A、2代表B、3代表C)
现在我们已经有了思路,那么就可以写程序了,简单粗暴枚举之后,就到了比较难的判断环节,这个地方也是建议把好写的作为筛选的条件例如第一题、第二题等等,相对较复杂的第七题就可以人脑判断。代码如下:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a[11],pd,i1,i2,i3,i,zhishu;
a[9]=a[10]=3;
{
for(a[1]=1;a[1]<=3;a[1]++)
for(a[2]=1;a[2]<=3;a[2]++)
for(a[3]=1;a[3]<=3;a[3]++)
for(a[4]=1;a[4]<=3;a[4]++)
for(a[5]=1;a[5]<=3;a[5]++)
for(a[6]=1;a[6]<=3;a[6]++)
for(a[7]=1;a[7]<=3;a[7]++)
for(a[8]=1;a[8]<=3;a[8]++)
{
i1=0;i2=0;i3=2;pd=0;zhishu=0;//pd用来判断是否符合条件
for(i=1;i<=8;i++)
{
if (a[i]==1) i1++;//(统计每个选项出现次数)
if (a[i]==2) i2++;
if (a[i]==3) i3++;
}
if((i1==2)||(i1==3)||(i1==5)||(i1==7))zhishu++;//统计选项出现次数为素数的个数
if((i2==2)||(i2==3)||(i2==5)||(i2==7))zhishu++;
if((i3==2)||(i3==3)||(i3==5)||(i3==7))zhishu++;
if(a[1]!=zhishu)pd++;
if((a[2]+1)!=i2)pd++;
if(((i1-i3)!=(4-a[3]))&&((i3-i1)!=(4-a[3])))pd++;
if((a[5]==1)&&(a[2]!=a[3]))pd++;
if((a[5]==2)&&(a[4]!=a[5]))pd++;
if((a[5]==3)&&(a[6]!=a[7]))pd++;
if((a[6]==1)&&(i1!=2))pd++;
if((a[6]==2)&&(i2!=3))pd++;
if((a[6]==3)&&(i1!=4))pd++;
if (pd==0)
{
printf("***\n");
printf("%c",a[1]+64);
printf("%c",a[2]+64);
printf("%c",a[3]+64);
printf("%c",a[4]+64);
printf("%c ",a[5]+64);//五个五个隔开好判断
printf("%c",a[6]+64);
printf("%c",a[7]+64);
printf("%c",a[8]+64);
printf("%c",a[9]+64);
printf("%c",a[10]+64);
printf(" %d %d %d \n",i1,i2,i3);
printf("***\n");//分隔开每一组
}
}
}
}
随后结果如图:
此时我们只需要简单看一下即可得到答案就是:
CBABBACCCC