数组元素循环右移问题 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++培训班,选达内就对了。

版权声明:转载文章来自公开网络,版权归作者本人所有,推送文章除非无法确认,我们都会注明作者和来源。如果出处有误或侵犯到原作者权益,请与我们联系删除或授权事宜。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值