当前位置:编程学习 > C/C++ >>

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++编程问题 学生成绩查询系统

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,