博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
百练OJ 1017 2801
阅读量:6123 次
发布时间:2019-06-21

本文共 3125 字,大约阅读时间需要 10 分钟。

一、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 
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 <

二、2801填词

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

1 /*      填词 2  *      这个很容易去计算各个单词所在的位置,这样很容易出错 3  *      创建一个有26个字符的字符数组 4  */ 5 #include 
6 #include
7 #include
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<
> 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 }

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

转载地址:http://qbgka.baihongyu.com/

你可能感兴趣的文章
Objective-C中创建单例方法的步骤
查看>>
Jenkins持续集成环境部署
查看>>
emoji等表情符号存mysql的方法
查看>>
检查磁盘利用率并且定期发送告警邮件
查看>>
MWeb 1.4 新功能介绍二:静态博客功能增强
查看>>
linux文本模式和文本替换功能
查看>>
Windows SFTP 的安装
查看>>
摄像机与绕任意轴旋转
查看>>
rsync 服务器配置过程
查看>>
预处理、const与sizeof相关面试题
查看>>
爬虫豆瓣top250项目-开发文档
查看>>
Elasticsearch增删改查
查看>>
oracle归档日志增长过快处理方法
查看>>
有趣的数学书籍
查看>>
teamviewer 卸载干净
查看>>
多线程设计模式
查看>>
解读自定义UICollectionViewLayout--感动了我自己
查看>>
SqlServer作业指定目标服务器
查看>>
UnrealEngine4.5 BluePrint初始化中遇到编译警告的解决办法
查看>>
User implements HttpSessionBindingListener
查看>>