天天看點

數組元素循環右移問題 c語言,C++ 算法題解:數組元素循環右移問題詳解

1、數組元素循環右移問題

思路:

最長可能輸入20位整數,long long也有可能會溢出,隻能用字元串處理。

注意string的每一位是一個char,做計算注意-'0'

自己實作計算,準備一個進位項,由于隻做翻倍,可簡單判斷此位>5進位項為1,否則為0

由于翻倍後可能位數+1,預設翻倍後的char數組時按+1大小來開,計算結束後,通過判斷最高位,将正确的char賦到字元串中去,後面用字元串來處理

判斷是否是原數的數字調換順序,隻要組成兩個數的數字個數都對應即可确定。

#include

#include

#include

using namespace std;

int main()

{

string ori_num;

cin >> ori_num;

bool isPermutation = true;

int ori_bitnum[10] = {0};

char *double_num = new char[ori_num.length()+1];

if (ori_num[0] >= '5') isPermutation = false;

char carry = '0';

for (int i = ori_num.length(); i > 0; i--){

double_num[i] = (ori_num[i-1] - '0') * 2 % 10 + carry;

carry = ori_num[i-1] < '5'? '0': '1';

++ori_bitnum[ori_num[i-1]-'0'];

}

double_num[0] = carry;

string double_numstr = carry != '0'? double_num: double_num + 1;

if(isPermutation){

int double_bitnum[10] = {0};

for (int i = 0; i < ori_num.length()+1; i++){

++double_bitnum[double_numstr[i]-'0'];

}

for (int i = 0; i < 10; i++){

if (ori_bitnum[i] != double_bitnum[i]){

isPermutation = false;

break;

}

}

}

printf("%s\n",isPermutation? "Yes": "No");

cout << double_numstr;

return 0;

}

2、Shuffling Machine

思路:多開一個數組,按給定的順序将原數組的卡片内容賦過去,如果多次操作,就将新的數組搬運到原數組中去。

#include

#include

using namespace std;

string cards[54];

string new_cards[54];

void copyCards(){

for (int i = 0; i < 54; i++){

cards[i] = new_cards[i];

}

}

int main()

{

for (int i = 0; i < 54; i++){

if (i < 13){

cards[i] = "S";

cards[i].append(to_string(i+1));

}else if (i < 26){

cards[i] = "H";

cards[i].append(to_string(i-12));

}else if (i < 39){

cards[i] = "C";

cards[i].append(to_string(i-25));

}else if (i < 52){

cards[i] = "D";

cards[i].append(to_string(i-38));

}else{

cards[i] = "J";

cards[i].append(to_string(i-51));

}

}

int k;

cin >> k;

int order[54];

for (int i = 0; i < 54; i++){

cin >> order[i];

}

for (int j = 0; j < k; j++){

for (int i = 0; i < 54; i++){

new_cards[order[i]-1] = cards[i];

}

copyCards();

}

for (int i = 0; i < 53; i++){

cout << cards[i] << " ";

}

cout << cards[53];

return 0;

}

當你還在擔心能否就業時,達内學員提前被企業錄取;當你轉輾于各大招聘會時,達内學員收到了高薪offer;當你在各大招聘網站投遞履歷時,達内學員中有人一畢業進入五百強名企。是以選擇很重要。找C++教育訓練班,選達内就對了。

版權聲明:轉載文章來自公開網絡,版權歸作者本人所有,推送文章除非無法确認,我們都會注明作者和來源。如果出處有誤或侵犯到原作者權益,請與我們聯系删除或授權事宜。