您的位置:首页 > 其它

数学三角形问题

2015-10-19 20:16 239 查看
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <stdio.h>
#include <stdlib.h>

using namespace std;

int main(){
//数据读取
ifstream in("input.txt",ios::in);
if (!in.is_open()){
cout << "Error opening file";
exit(1);
}
char ch;
int n = in.get()-'0';//读取n
//cout << n << endl;
in.get();

int** m = new int*
;//生产n*n阶的矩阵存放数据
for (int i = 1; i <= n; i++){
m[i-1] = new int[i];
}

int k = 0;
int j = 0;
while (!in.eof())
{
j = 0;
while((ch = in.get()) != '\n'){
m[k][j] = ch - '0';
//cout << m[k][j] << endl;
j++;
if ((ch = in.get()) == '\n')break;
if (in.eof())break;
}
k++;
}
in.close();
//功能实现
for (int i = 1; i < n; i++){
for (int j = 0; j <= i; j++){
int ld = j==0?m[i-1][j]:m[i-1][j-1];//这个数与上一级左边合并,如果是第一个数就和右边合并
int rd = j==i?m[i-1][j-1]:m[i - 1][j];//这个数与上一级右边合并,如果是最后一个数就和左边合并
m[i][j] = m[i][j] + (ld>rd ? ld : rd);//选择最小的
}
}

for (int i = 0; i < n; i++){
for (int j = 0; j <= i; j++){
cout << m[i][j] << "  ";
}
cout << endl;
}
int vmax = 0;
for (int i = 0; i < n; i++){
vmax = vmax>m[n - 1][i] ? vmax : m[n - 1][i];
}
cout << "最大值为:" << vmax << endl;

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: