Description
乔治拿来一组等长的木棒,将它们随机地砍断,使得每一节木棍的长度都不超过50个长度单位。然后他又想把这些木棍恢复到为裁截前的状态,但忘记了初始时有多少木棒以及木棒的初始长度。请你设计一个程序,帮助乔治计算木棒的可能最小长度。每一节木棍的长度都用大于零的整数表示。
Input
输入包含多组数据,每组数据包括两行。第一行是一个不超过64的整数,表示砍断之后共有多少节木棍。第二行是截断以后,所得到的各节木棍的长度。在最后一组数据之后,是一个零。
Output
为每组数据,分别输出原始木棒的可能最小长度,每组数据占一行。
Sample Input
9
5 2 1 5 2 1 5 2 1
4
1 2 3 4
0
Sample Output
6
5
 
自己写了个算法,不过一直没通过,显示wrong answer
把自己的代码写出来吧
 
#include<iostream>
using namespace std;
int main()
{
 int a[100000]={0};
 int out[100000]={0};
    int m=0,i=0;
 do
 {
  
  cin>>a[i++];
  
 } while (a[i-1]!=0);
 
 for(int j=0;a[j]!=0;j++)
 {
  int sum=0;
  int max=0;
  for(int k=1;k<=a[j];k++)
  {
   if (max<a[j+k])max=a[j+k];
   sum+=a[j+k];
  }
  int c=max;
  while((sum%c!=0)||((sum/c)<max))c--;
  out[m++]=sum/c;
  j+=a[j];
 }
 for(int j=0;out[j]!=0;j++)
 {
  cout<<out[j]<<endl;
 }
}
 
下面是别人写的一个算法。。可以参考一下。