华为机试30

给定一个仅包含0和1的n* n二维矩阵
请计算二维矩阵的最大值
计算规则如下
1、每行元素按下标顺序组成一个二进制数(下标越大约排在低位),
二进制数的值就是该行的值,矩阵各行之和为矩阵的值
2、允许通过向左或向右整体循环移动每个元素来改变元素在行中的位置
比如
[1, 0, 1, 1, 1] 向右整体循环移动两位[1, 1, 1, 0, 1]
二进制数为11101 值为29
[1, 0, 1, 1, 1] 向左整体循环移动两位[1, 1, 1, 1, 0]
二进制数为11110 值为30

输入描述
1.数据的第一行为正整数,记录了N的大小
0 < N <= 20
2.输入的第2到n + 1行为二维矩阵信息
行内元素边角逗号分割

输出描述
没行右移 5
1, 0, 0, 0, 1
0, 0, 0, 1, 1
0, 1, 0, 1, 0
1, 0, 0, 1, 1
1, 0, 1, 0, 1

输出
122,矩阵的最大值和

#include
#include
#include
#include
#include
using namespace std;
int main()
{
int N;
cin >> N;
vector<vector>arr(N,vector(N));
getchar();
for (int i = 0; i < N; i++) {
int j = 0;
string s;
getline(cin, s);
istringstream s1(s);
int len = 0;
while(len<s.length() ){
arr[i][j++] =s[len];
len += 2;
}
}
int count = 0;
for (int i = 0; i < arr.size(); i++)
{
int nmax = INT32_MIN;
string stemp;
for (int j = 0; j < N; j++)
{
stemp+= arr[i][j];
}
int k = 0;
int sum = 0;
while (k < stemp.length())
{
char s = stemp[0];
stemp.erase(stemp.begin());
stemp.push_back(s);
k++;
sum = stoi(stemp,nullptr,2);
nmax = max(sum, nmax);
}
count += nmax;
}
cout << count << endl;
return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值