问题如下: 假设你有一些整体长度的棍子。棒子被切割,使得它们在每次迭代中都被最小的棒的长度减少。您必须在每行显示 数量的切割。 重复上述步骤直到没有任何剩余。示例:
6
5 4 4 2 2 8
这里6是棍子的数量,其余是各种棍子的长度。
示例输出为:
6 4 2 1
为什么呢?在第一操作中,从每个杆上切下2个。所以新的长度是
3 2 2 6
因此,在这次迭代中切割所有的枝条,切割的枝条数量为6.依此类推。
代码如下:
int i,j,size,curmin,c,k,temp,Array[1000];
scanf("%d", &size);
for(i=0;i<size;i++)
scanf("%d ", &Array[i]);
for(i=0;i<size-1;i++)
{
for(j=0;j<size-i-1;j++)
{
if(Array[j]<Array[j+1]) //sorting using bubble sort
{
temp=Array[j+1];
Array[j+1]=Array[j];
Array[j]=temp;
}
}
}
int count=0; // for counting number of elements which are zero
for(i=0;i<=size-1;i++)
{
if(Array[i]==0)
count++; // store number in count variable
}
if(count==size) // exit program if all elements of array are zero
exit(1);
for(j=0;j<size;j++)
{
c=0; //for finding number of sticks cut in each loop
curmin=Array[0]; // for finding out minimum value in array for the running loop, assume that first element is minimum
for(i=0;i<=size-1;i++)
{
if(curmin>=Array[i] && Array[i]>0) //find minimum value in the current loop, obviously it cannot be zero, hence the second condition
{
curmin=Array[i];
}
}
for(i=0;i<size;i++)
{
if(Array[i]>=curmin)
{
Array[i]=Array[i]-curmin; // subtract minimum value from each element
c++; // increase number of elements cut by one - since we need to find this quantity for each loop
}
}
printf("%d\n",c); // print number of elements cut after each loop
if(c==1) //we know that no sticks can be cut further, so break
break;
}
这是一个HackerRank挑战,在提供的9个测试用例中,7个工作和运行。 我真的很难过。任何想法都会受到欢迎。