资源简介
C++实现从input.txt读取k值n值以及数据,计算最大k乘积,并将结果写入文件output.txt,压缩包包含文件readme.txt对代码做了简要介绍,将文件路径修改便可运行,如果想对算法深入了解可查看我的博客:http://blog.csdn.net/u014524107/article/details/45770295
代码片段和文件信息
/*************************************************************************
> File Name: Kproduct.cpp
> Author: wuchenyang
> Created Time: 2015年05月10日 星期六 19时14分18秒
算法思路:
采用动态规划法求解:
n为数字长度,k为划分个数;
p[i][k] 表示0~i 所表示数字的十进制数 最大k乘积, c[k+1][i]表示数字 n-i+1~i 所表示的十进制数
1.若k值为1则0~n所表示的十进制数为最大;
2.若k>0 && k
************************************************************************/
#include
#include
#include
#include
#include
using namespace std;
class product
{ int n;
int k;
int c[10][10];
int p[10][5];
int num[10];
string data;
int pmax;
public :
void readfile();
void init_Arryc();
void charToInt();
void productArry();
void writeTofile();
};
/*写入文件*/
void product::writeTofile()
{
ofstream outf(“/home/xiaoquan/suanfa/output.txt“);
if(!outf.is_open())
{
cout<<“open the file failed!“< }
outf< outf.close();
}
/*最大k乘积*/
void product::productArry()
{
p[n][k];
if(n<0|k>n-1|k<0) /*k 或者 n 的值不合法*/
{
cout<<“k value or n value is not right!“< }
if(k == 1) /*k值为1*/
{
cout<<“最大k乘积为:“< }
else
{
for(int i = 1; i< n+1; i++) /*k值为1*/
{
p[i][1] = c[1][i];
}
for(int i = 1; i<= n;i++)
{
for(int j = 2; j<=k ;j++)
{
int max = 0;
for(int k = 1;k {
i int temp = p[k][j-1] * c[k+1][i];
if(temp > max)
{
max = temp;
}
}
p[i][j] = max;
}
}
pmax = p[n][k];
cout<<“数组p:“< for(int i = 1; i<= n;i++)
{
for(int j = 1;j<= n;j++)
{
cout<
}
cout< }
cout<<“最大k乘积为:“< }
}
/*初始化数组*/
void product::init_Arryc()
{
c[n][n];
cout<<“c:“< for(int i = 1; i <= n; i++)
{
c[i][i] = num[i];
for(int j = i+1; j <= n; j++)
{
c[i][j] = c[i][j-1]*10 + num[j];
// cout< }
cout<
}
for(int i = 1; i<=n; i++)
{
for(int j = 1; j<=n; j++)
{
cout< }
cout< }
}
/*将字符数组转化为整型数组*/
void product::charToInt()
{
num[n] = 0;
cout<<“data:“< cout<<“num:“< for(int i = 0 ;i < n;i++)
{
num[i+1] = data[i] - ‘0‘;
cout< }
}
/*读取文件*/
void product::readfile()
{
char line1[20];
char line2[20];
string x1x2;
// int nk;
ifstream inf(“/home/xiaoquan/suanfa/input.txt“);
if(!inf.is_open())
{
cout<<“open file error!“< }
inf.getline(line1sizeof(line1));
inf.getline(line2sizeof(line2));
// cout< stringstream word(line1);//提取空格读取文件第一行
word>>x1;
word>>x2;
n = atoi(x1.c_str()); //将字符串类型转化为整型
k = atoi(x2.c_str());
data = line2;
// cout<<“n= “< // cout<<“x1=“<
}
int main()
{
product pc ;
pc.readfile();
pc.charToInt();
pc.init_Arryc();
pc.productArry();
pc.writeTofile();
return 0;
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 3200 2015-05-12 17:57 最大k乘积\Kproduct.cpp
文件 304 2015-05-16 09:22 最大k乘积\readme.txt
目录 0 2015-05-16 09:07 最大k乘积\
- 上一篇:连通域处理
- 下一篇:C语言系统课程设计报告
评论
共有 条评论