tofu2333 / blog

0 stars 0 forks source link

C++第一次附加题题解 #28

Open tofu2333 opened 1 year ago

tofu2333 commented 1 year ago

课上老师给出了作业附加题,根据我道逍遥(207176782)道友提供的思路,成功解题。

附加题

第一次尝试:

刚拿到手一看在想是不是某些字的笔画拆分,但是看到那个X U还有问号处的上下两个图案感觉就不像是,此思路失败。

第二次尝试:

将所有*号写到文本上观察,看了很久也没有思绪,这六个图案怎么看都联系不到一块。

两组图案

第三次尝试:

根据我道逍遥道友给出的01图,茅塞顿开。其中将*号转为1,空格转为0列出这六个图案。

01图

第一组图案

第一组图案

第一组图案对应的01如下:

100 111     011
001 010 =>  011
011 111     100

观察上面的01,第一行从左往右看,100 + 111 => 01111相消变为0,其它项就对应相加,按照这个规律往下继续计算,可以得出第一组图案中由左边两个图案“相加”得到最右边的图案。

第二组图案

为了验证从第一组图案中得出的规律是否正确,用第二组图案来验证。

第二组图案

对应的01:

101 101     000
010 101 =>  111
101 111     010

按照第一组图案得出的规律,可以验证第二组图案也适用。

既然如此,那么就可以得出本题答案了,但是发现?处的图案不是一排,那就无法从左往右看。

再往回看从图案中找出的规律和对应的01,能够发现任意两个“相加”都能得出第三个图案,那么只要将上下两个图案“相加”即为本题答案。

问号处的图案

01001   00011       01010        * * 
01000   10011       11011       ** **
10011   01100   =>  11111   =>  *****
00010   01100       01110        *** 
10100   10000       00100         *  

对应C++代码:

#include <iostream>
using namespace std;

int main(){

    cout << " * * " << endl
         << "** **" << endl
         << "*****" << endl
         << " *** " << endl
         << "  *  " << endl;

    return 0; 
}