1、定义一个n*m的数字矩阵,找出不同行不同列的两个数的乘积的最大值。
输入: n,m
2 2
1 2
3 4
输出最大值为:6
struct Tp
{
int n;
int m;
int num;
Tp(int a, int b, int c) :n(a), m(b), num(c) {}
};
int cmp2(Tp x, Tp y)
{
return x.num> y.num;
}
int main
{
vector<Tp> vtp;
int M, N;
cin >> M >> N;
int *p = new int[M*N];
for (int i = 0; i < N; i++)
{
for (int j = 0; j < M; j++)
{
cin >> p[i*M+j];
vtp.push_back( {i, j, p[i*M + j]});
}
}
sort(vtp.begin(), vtp.end(), cmp2);
int min =vtp[M*N-1].num;
int smax = 0;
for (int i = 0; i < M*N-1 && vtp[i].num>=min; i++)
{
for (int j = i + 1; j < M*N && vtp[j].num >= min; j++)
{
if (vtp[i].m != vtp[j].m && vtp[i].n != vtp[j].n)
{
if (smax < vtp[i].num * vtp[j].num) {
smax = vtp[i].num * vtp[j].num;
min = vtp[j].num;
}
break;
}
}
}
cout << smax;
return 0;
}
#include <vector>
#include <string>
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int n;
int m;
cin>>n>>m;
vector<vector<int> > arr(n,vector<int>(m));
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cin>>arr[i][j];
}
}
int _max=-1;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
int temp=arr[i][j]; //
for(int k=0;k<n;k++){
for(int l=0;l<m;l++){
if(k!=i&&l!=j){
int temp2=arr[k][l];
_max=max(temp*temp2,_max);
}
}
}
}
}
cout<<_max;
return 0;
}
2.
#include <iostream>
using namespace std;
int main()
{
string str;
getline(cin,str);
int n;//move bits numbers
cin>>n;
int m=str.size();
if(n<=0){
cout<<str;
}
if(n>m){
n%=m;
}
string res="";
for(int i=n;i<m;i++){
res+=str[i];
}
for(int i=0;i<n;i++)
{
res+=str[i];
}
cout<<res;
return 0;
}
特别注意:有可能字符串带有空格,所以总结: