3,881
社区成员
发帖
与我相关
我的任务
分享
#include <algorithm>
#include <iostream>
#include <fstream>
#include <sstream>
#include <vector>
#include <cmath>
using namespace std;
int factorial(int step)//阶乘
{
int result = 1;
for(int i = 2; i < step+1; i++)
result *= i;
return result;
}
bool reversekeyindex(int *permutate,int step)//逆序数
{
int num = 0;
for(int i = 0; i < step; i++)
{
for(int j = 0; j < i; j++)
if(permutate[i] < permutate[j])
num++;
}
if(num%2)
return false;
else
return true;
}
int getdata(vector<double> &vec,_TCHAR* filename)//获取矩阵
{
ifstream ifs(filename);
int count;
double temp;
while(!ifs.eof())
{
ifs>>temp;
vec.push_back(temp);
}
ifs.close();
return count = sqrt(static_cast<double>(vec.size()));
}
int _tmain(int argc, _TCHAR* argv[])
{
vector<double> vec;
int step = getdata(vec, argv[1]);
int *permutate = new int[step];
for(int i = 0; i < step; i++)
permutate[i] = i;
int result = 0;
for(int i = 0; i < factorial(step); i++)
{
int temp = 1;
for(int j =0 ; j < step; j++)
{
temp *= vec[j*step+permutate[j]];
}
if(!reversekeyindex(permutate, step))
temp = -temp;
result += temp;
prev_permutation(permutate, permutate+step);
}
cout<<result<<endl;
delete[] permutate;
return 0;
}
#include <iostream>
#include <vector>
#include <fstream>
#include <cmath>
using namespace std;
void reversion(vector<int> &vec, int order)
{
int temp;
for (int i = 0; i < order; i++ )
{
for (int j = 0; j < order; j++ )
{
if(i > j)
{
temp = vec[i*order+j];
vec[i*order+j] = vec[i+order*j];
vec[i+order*j] = temp;
}
}
}
}
int main()
{
ifstream ifs("d:\\test.txt");
if(!ifs) return 1;
vector<int> vec;
int temp;
while(!ifs.eof())
{
ifs>>temp;
vec.push_back(temp);
}
int order = (int)sqrt((double)vec.size());
cout<<"The region data:"<<endl;
for(unsigned int i = 0; i < vec.size(); i++)
{
cout<<vec[i]<<ends;
if((i+1) % order == 0)
cout<<endl;
}
cout<<endl<<"The reversion data:"<<endl;
reversion(vec, order);
for(unsigned int i = 0; i < vec.size(); i++)
{
cout<<vec[i]<<ends;
if((i+1) % order == 0)
cout<<endl;
}
return 0;
}