切火柴 - HackerRank Challenge - C实现

时间:2016-01-26 11:14:50

标签: c arrays

问题如下: 假设你有一些整体长度的棍子。棒子被切割,使得它们在每次迭代中都被最小的棒的长度减少。您必须在每行显示 数量的切割。 重复上述步骤直到没有任何剩余。示例:

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个工作和运行。 我真的很难过。任何想法都会受到欢迎。

0 个答案:

没有答案