Jack 正在组装自己的飞行器,他希望从手中的一些很奇怪的能量晶石中,选择一块,作为飞行器引擎的能量来源。
每个晶石,都用一连串的数字进行标注。 可以整块使用,也可以通过对晶石的切割,得到不同强度的能量输出。 切割后,各个晶石片段能量强度之和计算方式为:各个晶石片段上的整数之和。(不可把单个数字切割成 2 半)。 由于飞行器引擎所能承受的能量强度存在上限,切割完的晶石片段,能量强度之和不能超过上限,否则将导致引擎过载。同时,为节省晶石的浪费, Jack 希望一块晶石切下来的所有片段,都必需加入到飞行器引擎中,不能丢弃。 例:晶石“ 352143”,可分割为 35,214,3。它们的能量强度之和为 252。也可分割为352,143,能量强度和为 495 Jack 希望知道,在不导致引擎过载的同时,手中的这些能量晶石, 各自能够达到的最接近引擎上限的能量强度是多少。1 #include2 #include 3 #include 4 #include 5 #include 6 #include 7 using namespace std; 8 int func(char sc[],char b[],int flag) 9 {10 int last=-1,t,r,m,sum=0,len=strlen(sc);11 char part[20];12 for(t=0;t =max)67 {68 a[m++]=sum;69 max=sum;70 strcpy(ans,b);71 }72 }73 if(m>0) sort(a,a+m);//若有多种方案,能量和均能达到最接近引擎上限74 if(m==0)75 {76 printf("Error\n");77 }78 else if(a[m-1]==a[m-2]&&m>1)79 {80 printf("Oooops\n");81 }82 else83 {84 sum=func(num,ans,1);85 }86 }87 return 0;88 }