一道網上找的微軟筆試題

來源:互聯網
上載者:User

給你一串數字,例如"1234567890",按照以下規則加密:

1. 將所有的3,6換成4

2. 將所有的數字加2,如果加2後得到的數字大於9,則替換為9

 

問題:

1. 編寫加密程式

2. 編寫解密程式

 

思考:

加密程式很簡單,我這裡就不寫了。

寫一下解密程式,解密程式要輸出所有可能的字串組合,

數字對應如下:

0 - 2

1 - 3

2 - 4

3 - 6

4 - 6

5 - 7

6 - 6

7 - 9

8 - 9

9 - 9

 

可以發現6和9兩個數字各有3種可能情況,於是就要迴圈遍曆,然後其他數字,簡單的減2即可,可以考慮用遞迴實現。

 

#include <iostream><br />using namespace std;</p><p>void decrypt(char a[],char b[], int begin, int end) //a[begin...end]<br />{<br />int i=begin;<br />while(i<=end && a[i]!='6' && a[i]!='9')<br />{<br />b[i]=a[i]-2;<br />i++;<br />}<br />if(i>end)<br />{<br />b[i]='/0';<br />for(int j=0;j<=end+1;j++)<br />cout << b[j];<br />cout << endl;<br />return;<br />}<br />else<br />{<br />if(a[i]=='6')<br />{<br />for(int j=0;j<=2;j++)<br />{<br />if(j==0)<br />b[i]='3';<br />else if(j==1)<br />b[i]='4';<br />else if(j==2)<br />b[i]='6';<br />decrypt(a,b,i+1,end);<br />}<br />}<br />if(a[i]=='9')<br />{<br />for(int j=0;j<=2;j++)<br />{<br />b[i]='7'+j;<br />decrypt(a,b,i+1,end);<br />}<br />}<br />}<br />return;<br />}</p><p>int main()<br />{<br />char *a="2467976749";<br />int length=strlen(a);<br />char *b=new char[length+1];<br />decrypt(a,b,0,length-1);<br />}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.