zoukankan      html  css  js  c++  java
  • 百练OJ 1017 2801

    一、1017填箱子

         这个题题目读起来有些晦涩,如果按题目给的条件很难找到突破口,需要事先计算一下每种CP(产品)在没装满的情况下还需要的其他CP数。(这个地方凭主观判断不出来,需要适当推一下),以下是AC的代码。

     1 /*        将一个6*6的包裹填满
     2  *        关键是计算出每个包裹中需要的产品数,在写程序,避免程序的冗余复杂
     3  *        分析:6*6的产品会占用一个箱子,
     4  *              5*5的CP填满箱子还需11个1*1的CP,
     5  *              4*4的CP填满还需5个2*2的CP,
     6  *              3*3的CP填满分情况:i.4的倍数刚好填满,ii.4的倍数多1,多出的一个重新分配一个箱子,
     7  *              则还需5个2*2的CP和7个1*1的CP,iii.4的倍数加2,多出的2个重新分配一个箱子,则需3个
     8  *              2*2的CP,6个1*1的CP,iiii.4的倍数多3,多出的3个重新分配一个箱子,则需1个2*2的CP,
     9  *              5个1*1的CP,用arrayCP2*2[4] = {0,5,3,1}表示3*3CP需要2*2的CP的数量,
    10  *              2*2的CP填满即可,多出来在重新加一个箱子
    11  *              1*1的CP也和2*2的CP类似
    12  */
    13 
    14 #include <iostream>
    15 using namespace std;
    16 
    17 int main()
    18 {
    19     int a,b,c,d,e,f;                //a,b,c,d,e,f分别表示各类型的CP的数量
    20     int BoxN;                       //箱子的数量
    21     int arrayCP2[4] = {0,5,3,1};
    22     int X1,X2;                      //分别表是需要1*1CP,2*2CP的空位
    23     while (1){
    24     cin >> a >> b >> c >> d >> e >> f;
    25     if (0 == a && 0 == b && 0 == c && 0 == d && 0 == e && 0 == f) 
    26         break;
    27     BoxN = f + e + d + (c + 3)/4;
    28 
    29     /*    这里是一个小小的规律:(c+3)/4表示2*2的CP/4取上整
    30      *  一件CP需要一个箱子,4件CP需要一个箱子,5件CP需要两个箱子
    31      *    依次,很经典!!学会用,这就是数学的魅力,下面的也一样
    32      */
    33 
    34     X2 = 5 * d + arrayCP2[c % 4];     //每个4*4的箱子需要5个,3*3的箱子按规律需要
    35     if ((b - X2) > 0)             //还有剩余
    36         BoxN += (b - X2 + 8)/9;   //同上,需要2*2的箱子数
    37     X1 = BoxN * 36 - 36 * f - 25 * e - 16 * d - 9 * c - 4 * b;  //总数减去所有被其他CP占用的就是1*1CP的数量
    38     if ((a - X1) > 0)
    39         BoxN += (a - X1 + 35)/36; //需要1*1的箱子数
    40     cout << BoxN <<endl;
    41     }
    42     return 0;
    43 }

    二、2801填词

          这个题容易把题目理解偏了,题目有一句话要求:“填入保证填词游戏至少有一组答案”,所以,就想方设法找单词的填法,另外一个问题:数组要尽量按题目要求开大一点。

     1 /*      填词
     2  *      这个很容易去计算各个单词所在的位置,这样很容易出错
     3  *      创建一个有26个字符的字符数组
     4  */
     5 #include <iostream>
     6 #include <cstdio>
     7 #include <cstring>
     8 using namespace std;
     9 
    10 int const MaxM = 101;
    11 int const MaxN = 10;
    12 int const MaxLength = 1001;
    13 char words[MaxN][MaxM];
    14 char str[MaxLength];
    15 int characters[26];
    16 
    17 void ResetCharacters (int n);
    18 void ResetCharactersNow (int n);
    19 
    20 int main()
    21 {
    22     int n,m,p;
    23     memset(characters,0,sizeof(int));
    24     cin >> n >> m >> p;
    25     ResetCharacters(n);
    26     ResetCharactersNow(p);
    27     for (int i = 0; i != 26; ++i){
    28         if (characters[i] != 0){
    29             for(int j = 0; j != characters[i]; ++j)
    30                 printf("%c",i + 'A');
    31         }
    32     }
    33     cout<<endl;
    34     return 0;
    35 }
    36 
    37 
    38 void ResetCharacters(int n)      //用数组存储的方法
    39 {
    40     for (int i = 0; i != n; ++i)
    41         cin >> words[i];
    42     for (int i = 0; i != n; ++i){
    43         for (int j = 0; words[i][j] != '\0'; ++j)
    44             characters[words[i][j] - 'A'] ++; 
    45     }
    46 }
    47 // void ResetCharacters(int n)         //这是另外一种方法,用字符串
    48 // {
    49 //     char s[11];
    50 //     for (int i = 0; i!= n; ++i){
    51 //         cin >> s;
    52 //         for (int j = 0; s[j] != '\0'; ++j)
    53 //             characters[s[j] - 'A'] ++; 
    54 //     }
    55 // }
    56 
    57 void ResetCharactersNow(int n)
    58 {
    59     for (int i = 0; i != n; ++i){
    60         cin >> str;
    61         for (int i = 0; str[i] != '\0'; ++i)
    62             characters[str[i] - 'A']--;
    63     }
    64 }

    个人总结:想问题要灵活,千万不要死脑筋。

    stay hungry stay foolish ----jobs 希望多多烧香!
  • 相关阅读:
    JavaScript 为字符串添加样式 【每日一段代码80】
    JavaScript replace()方法 【每日一段代码83】
    JavaScript for in 遍历数组 【每日一段代码89】
    JavaScript 创建用于对象的模板【每日一段代码78】
    html5 css3 新元素简单页面布局
    JavaScript Array() 数组 【每日一段代码88】
    JavaScript toUTCString() 方法 【每日一段代码86】
    位运算
    POJ 3259 Wormholes
    POJ 3169 Layout
  • 原文地址:https://www.cnblogs.com/bakari/p/2627742.html
Copyright © 2011-2022 走看看