切換
舊版
前往
大廳
主題

[創作|作業][C++]演算法Week6:2-Packets

極巨龍神塔奇 | 2018-05-15 01:11:19 | 巴幣 2 | 人氣 354

包裹
有一間工廠生產的東西,被包裝在相同高度 h 的正方形容器內,但其面積大小分別有:1×1, 2×2, 3×3, 4×4, 5×5, 6×6 等六種尺寸。這些產品總是用高度為 h,面積為 6×6 的箱子打包後寄給客戶。因為成本關係,當然希望將客戶所訂購的產品放在最少的箱子裡寄出。請你寫一個程式找出寄送這些產品最少需要多少個箱子,這可以使工廠節省下不少錢。
Input
每組測試資料一列(就是一份訂單),含有 6 個整數。分別代表 1×1 到 6×6 產品的數目。若此 6 個整數均為 0 代表輸入結束。
Output
對每一組測試資料,輸出寄送這些產品最少需要多少個箱子。
範例輸入:
0 0 4 0 0 1
7 5 1 0 0 0
0 0 0 0 0 0
範例輸出:
2
1


/*----- ----- ----- -----*/
//2-Packets
//Made by 105502555 Teemo Hsu(Synasaivaltos)
//Date: 2018/05/04
/*----- ----- ----- -----*/
#include <iostream>
#include <vector>

using namespace std;

int main(void)
{
   int s1,s2,s3,s4,s5,s6;
   int t1,t2;
   vector<int> ans;

   while(true)
   {
      cin >> s1 >> s2 >> s3 >> s4 >> s5 >> s6;
      if(s1+s2+s3+s4+s5+s6==0) break;
      ans.push_back(s6);
      ans.at(ans.size()-1)+=s5;
      if((s1-=s5*11)<0) s1=0;
      ans.at(ans.size()-1)+=s4;
      t1=s4*20;
      if(s2>=s4*50) t1=0,s2-=s4*5;
      else
      {
         t1=s2*4,s2=0;
         if(s1>=t1) s1-=t1,t1=0;
         else t1-=s1,s1=0;
      }
      ans.at(ans.size()-1)+=(s3/4),s3%=4;
      if(s3)
      {
         ans.at(ans.size()-1)++;
         t1=36-s3*9,t2=(3-s3)*2+1;
         if(s2>=t2) s2-=t2,t1-=t2*4;
         else t1-=s2*4,s2=0;
         if(s2>=t1) s1-=t1,t1-=s1;
         else t1-=s1,s1=0;
      }
      ans.at(ans.size()-1)+=s2/4,s2%=9;
      if(s2)
      {
         ans.at(ans.size()-1)++;
         t1=36-s2*4;
         if(s1>=t1) s1-=t1,t1-=s1;
         else t1-=s1,s1=0;
      }
      ans.at(ans.size()-1)+=s1/36+(s1%36!=0);
   }

   for(int i=0;i<ans.size();cout<<ans.at(i)<<endl,i++);

   return 0;
}
送禮物贊助創作者 !
0
留言

創作回應

更多創作