C++编程,高手进
[输入文件:song.in]文件第一行有三个整数,n, beginLevel, maxLevel,分别表示曲目数,开始量,最大限制音量。下面有n-1行整数,第i行整数表示第i首曲与第i+1首曲之间的变化量。[输入文件:song.in]文件只一行一个数,答案。[样例:]4 5 105375 8 2015291010-1【数据范围】1<=n<=60;1<= maxLevel <=10000<= beginLevel <= maxLevel
追问:抱歉这个是这样的[样例:]4 5 10537 5 8 2015291010 -1【数据范围】1<=n<=60;1<= maxLevel <=10000<= beginLevel <= maxLevel
答案:#include <iostream>
#include<fstream>
#include <string>
using namespace std;
int main()
{
//f:array[0..100,-2000..2000] of boolean;
bool f[100][4000] = {false};
long n,start,max,i,j,jj;
long a[100];
// 读入数据 /////////////////////////////////////////////////////////////////////
std::ifstream song_in("song.in");
// 测试文件是否存在
if(!song_in)
cout << "Wrong to open song.in file!\n";
else
{
song_in>>n;
song_in>>start;
song_in>>max;
cout<<n<<" "<<start<<" "<<max<<endl;
}
for (i = 1; i <= n-1; i++)
{
song_in>>a[i+1];
cout<<a[i+1]<<endl;
}
// 开始计算 /////////////////////////////////////////////////////////////////////
f[1][start + 2000] = true;
for (i = 2; i <= n; i++)
for (j = 0; j <= max; j++)
{
if (j - a[i] >= 0)
{
f[i][j + 2000] = f[i-1][j-a[i] + 2000];
}
if (j + a[i] <= max)
{
f[i][j + 2000] = f[i][j + 2000] || f[i-1][j+a[i] + 2000];
}
}
jj = -1;
for (j = max; j >= 0; j--)
if (f[n][j + 2000])
{
jj = j;
break;
}
song_in.close();
// 输出结果 /////////////////////////////////////////////////////////////////////
std::ofstream song_out("song.out");
song_out.open("song.out");
song_out<<"jj"<<endl;
song_out.close();
cout<<"最后结果:"<<jj<<endl;
return 0;
}
能说的详细点吗?
不是太明白,你是想要一个能读这样文件的源代码?
上一个:C++编程问题,新手求解啊
下一个:c++编程问题 学生成绩查询系统