读书人

那个高手可一改改这个程序?解决方法

发布时间: 2012-04-09 13:41:25 作者: rapoo

那个高手可一改改这个程序??
我就是想把时间改短一点,那位高手帮帮改一下 就把时间改短一点就可以了??
下面是程序。 谢谢
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

#include <iostream>
using namespace std;
int main()
{
int b,a,e,sum,c,f,g;
cin > > a;
int *pp = new int [a];
for(e = 1;e <= a;e++)
{
cin > > b > > c;
int *p = new int[c];
for( int d = 0;d < c;d++)
cin > > p[d];
for(int s = 0;s < c;s++)
{ f = s;
for(int j = s + 1;j <= c;j++)
if(p[f] < p[j])f = j;
if(s!=f)
{
g = p[s];
p[s] = p[f];
p[f] = g;
}
}
sum=0;
for(int h = 0;h < c; )
{
sum += p[h];
if(sum > = b)
{
pp[e]=h+1;
break;
}
h++;
if(sum < b )
{
pp[e]=0;

}
}
}

for(int i=1;i <=a;i++)
{
if(pp[i] != 0)
{
cout < < "Scenario # " < < i < < ": " < < endl;
cout < < pp[i] < < endl;
cout < < endl;
}
else
{
cout < < "Scenario # " < < i < < ": " < < endl;
cout < < "impossible " < < endl;
cout < < endl;
}

}


system( "pause ");
return 0;
}


[解决办法]
放到一个std::vector里,然后用其排序,取最大的来加~

如果你有大量数据,可以考虑数据的情况自己重写最排序算法,不过stl的排序本身就很不错了


[解决办法]
这样把,我大致写点点

int iDataEle; // 保存每个输入的数据
std::vector vDataArray; //所有数据的容器
for(size_t nDataCount; nDataCount < nDataMaxSize; ++nDataCount)
{
cin> > iDataEle;
vDataArray.push_back(iDataEle);//装入所有输入的数据
}

std::sort(vDataArray.begin(),vDataArray.end()); //得到一个从小到大的排序,如果你的是作业,老师要说你,自己这里写个排序功能

//从尾巴开始取数据,加到那个要求值,返回个数,加不到返回imp

读书人网 >C++

热点推荐