64,637
社区成员
发帖
与我相关
我的任务
分享
#include <iostream>
#include <stdlib.h>
using namespace std;
int a=0,b=0,c=0,d=0;
const int size=200;
void sort(int value[],int nNumber)
{
for(int i=0;i <nNumber-1;i++)
for(int j=0;j <nNumber-1-i;j++)
if(value[j] <value[j+1])
{
int temp=value[j];
value[j]=value[j+1];
value[j+1]=temp;
}
}
int main(int argc, char *argv[])
{
int M=0;
int position[size];
cout <<"请输入要覆盖的区间总数M=";
cin>>M;
cout <<"请输入" <<M <<"个要覆盖的区间:" <<endl;
int i=0;
for(i=0;i <M;i++)
cin>>position[i];
sort(position,M);
int distance[size-1];
for(i=0;i <M-1;i++)
distance[i]=position[i+1]-position[i]-1;
sort(distance,M-1);
int N=1;
cout <<"请输入可用线段总数N=";
cin>>N;
if(N>M)
{
cout <<"最小线段总长" <<M <<endl;
for(i=0;i <5;i++)
cout <<"端点" <<i <<position[i]-1 <<"->" <<position[i] <<" ";
return 1;
}
int nline =1;
int ntotlelength=position[0]-position[M-1]+1;
int ndivide=0;
while((nline <N)&&(distance[ndivide]>0))
{
nline++;
ntotlelength-=distance[ndivide];
ndivide++;
}
cout <<"最小线段总长" <<ntotlelength <<endl;
for(i=0;i <M;i++)
{
if(position[i+1]-position[i]-1==3)
{
cout <<position[i];
cout <<position[i+1]-1;
}
if(position[i+1]-position[i]-1==2)
{
cout <<position[i];
cout <<position[i+1]-1;
}
}
system("PAUSE");
return 0;
}
稍微解释一下题目@!!!!!!
汗~~~~~~就是说有5个区间,分别是
第一个区间长度1
第二个区间长度3
第三个区间长度5
第四个区间长度7
第五个区间长度11
然后呢,用3条线段去覆盖
我的意思是怎么去覆盖???
给个正确的输出啊!!