[刷题]算法竞赛入门经典 3-1/UVa1585 3-2/UVa1586 3-3/UVa1225
书上具体所有题目:http://pan.baidu.com/s/1hssH0KO(我也是在网上找到的pdf,但不记得是从哪里搜刮到的了,就重新上传了一遍)
PS:第一次写博客分享我的代码,不知道我对csdn的使用姿势对不对。想不出来要说些什么哈o(^▽^)o,那就直接开工,先写一篇试试。
题目:算法竞赛入门经典 3-1/UVa1585:Score
代码:
#include<iostream>
#define MAX 83 int main()
{
int num;
std::cin >> num;
while (num--) {
char str[MAX], *ch = str;
int score = 0, sum = 0;
std::cin >> str;
while (*ch != '\0')
sum += (*(ch++) == 'X' ? score = 0 : ++score);
std::cout << sum << '\n';
}
return 0;
}
分析:MAX定为83而不是题目限制的80是为了传说中的鲁棒性,其他好像没什么好说的。。。下一题。。
题目:算法竞赛入门经典 3-2/UVa1586:Molar Mass
代码:
#include<iostream>
#include<iomanip> inline float f(char c)//得到分子量
{
switch (c) {
case 'C':return 12.01;
case 'H':return 1.008;
case 'O':return 16.00;
case 'N':return 14.01;
default:std::cerr << "error!\n";
}
std::cout << '\'' << c << '\'';
exit(0);
}
inline bool g(char c)//判断char的内容是不是数字
{
if (c >= '0'&&c <= '9') return 1;return 0;
} int main()
{
int num;//判断输入个数
std::cin >> num;
std::cout << std::fixed << std::setprecision(3);
while (num--) {
float sum = 0;
char str[83], *ch = str;
std::cin>>str;
while (*ch != '\0') {//此情况下不是'\0'就是字母
int n = 0;
char c = *ch;
while (g(*++ch))//是数字
n = n * 10 + *ch - '0';
if (!n) n = 1;
sum += f(c)*n;//若不是字母则报错结束程序
}
std::cout << sum << '\n';
}
return 0;
}
分析:这次写了注释,好像也没什么好说的了。。不过对于inline,我知道编译器如果觉得这个函数不够小巧,会忽略inline,但我一直不知道要多小才能编译器不忽略inline。然后因为程序比较小,所以没有给两个函数取名字,直接叫f和g。
题目:算法竞赛入门经典 3-3/UVa1225:Digit Counting
代码:
#include<iostream>
#include<cmath> int main()
{
int num;
std::cin >> num;
while (num--) {
int n, n2,d=1, times[10] = { 0 };//n:输入的数字,n2:备份n,times:保存各数字出现的次数
do std::cin >> n;while (n >= 10000);
n2 = n;
while (n2 /= 10) ++d;//d为位数
n2 = n;
int t = 1, sum = 0;//t不断乘以10,sum代表所有数字一样多的部分
while (d--) {//f代表某一位
int f = n2 % 10;
n2 /= 10;
sum += n2*t;
times[0] += (n2 - 1)*t;//0太奇葩,总比别人少一个,单独算
for (int i = 0;i < f;++i) times[i] += t;
times[f] += 1 + n%t;//当前位最大数字分开算
t *= 10;
}
std::cout << times[0];
for (int i = 1;i < 10;++i)
std::cout << ' ' << (times[i] += sum);
std::cout << '\n';
}
return 0;
}
分析:这题我看过网上其他人的做法,他们竟然真的把这个长长的数字串写进了字符数组,然后再遍历数组数一遍。总感觉这字符数组长度得爆炸而且慢。
这题的规律是:(划横线的是具体的那个数字)(以123为例)
第一列也就是12*1的那列,代表(除了零)所有数共有的部分(就比如123的前100中每个数字出现的一样多),在代码里用sum表示,比如对于十位上的每个数字,都出现了123/(10^2)*10次
第二列 也就是XXX各+1那列,代表特殊的那几个地方,就比如十位上数字是2,那么那超过100的23(准确说是20,个位上3不算在里面的原因在最后一列)就在此计算,但此计算不包括2
而最后一列又是最特殊的,比如十位上的2的与别人不同的地方在此计算,十位2开头的数120、121、122、123,十位上的2出现(123%10+1)=4次
零我是分开单独算的,因为它比较奇葩,就比如1、2、3而不是01、02、03,十位上的0是不写的,其实规律一样的。
嗯、工科男表达能力太差了。。感觉我越说越复杂。。。果然多写写博客练练表达是有好处的。
这次就上传这几题,看题目难度和代码长度来判断每次上传多少题目。
[刷题]算法竞赛入门经典 3-1/UVa1585 3-2/UVa1586 3-3/UVa1225的更多相关文章
- [刷题]算法竞赛入门经典 3-12/UVa11809
书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 题目:算法竞赛入门经典 3-4/UVa11809:Floating-Point Numbers 代码: //UVa11 ...
- [刷题]算法竞赛入门经典 3-10/UVa1587 3-11/UVa1588
书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 题目:算法竞赛入门经典 3-10/UVa1587:Box 代码: //UVa1587 - Box #include&l ...
- [刷题]算法竞赛入门经典 3-7/UVa1368 3-8/UVa202 3-9/UVa10340
书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 都是<算法竞赛入门经典(第二版)>的题目,标题上没写(第二版) 题目:算法竞赛入门经典 3-7/UVa13 ...
- [刷题]算法竞赛入门经典 3-4/UVa455 3-5/UVa227 3-6/UVa232
书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 题目:算法竞赛入门经典 3-4/UVa455:Periodic Strings 代码: //UVa455 #inclu ...
- [刷题]算法竞赛入门经典(第2版) 4-6/UVa508 - Morse Mismatches
书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 代码:(Accepted,10 ms) //UVa508 - Morse Mismatches #include< ...
- [刷题]算法竞赛入门经典(第2版) 5-15/UVa12333 - Revenge of Fibonacci
题意:在前100000个Fibonacci(以下简称F)数字里,能否在这100000个F里找出以某些数字作为开头的F.要求找出下标最小的.没找到输出-1. 代码:(Accepted,0.250s) / ...
- [刷题]算法竞赛入门经典(第2版) 5-13/UVa822 - Queue and A
题意:模拟客服MM,一共有N种话题,每个客服MM支持处理其中的i个(i < N),处理的话题还有优先级.为了简化流程方便出题,设每个话题都是每隔m分钟来咨询一次.现知道每个话题前来咨询的时间.间 ...
- [刷题]算法竞赛入门经典(第2版) 4-5/UVa1590 - IP Networks
书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 代码:(Accepted,0 ms) //UVa1590 - IP Networks #include<iost ...
- [刷题]算法竞赛入门经典(第2版) 6-7/UVa804 - Petri Net Simulation
题意:模拟Petri网的执行.虽然没听说过Petri网,但是题目描述的很清晰. 代码:(Accepted,0.210s) //UVa804 - Petri Net Simulation //Accep ...
随机推荐
- 关于View Link
当需要表格之间的父子结构的时候需要展示时,这个时候就需要建立View Link来实现Table之间的关联.在建立ViewLink时需要现将JDev关闭然后再进行创建自己需要的ViewLink.
- iOS 关于js与OC相互调用的那些事
最近项目上使用js调用OC,OC再次调用JS,再次在JS页面上面回显数据. 项目中使用的是WKWebview,加载网路的URL,其实就是使用WK加载出来的H5网页,在项目中用的是H5网页有个识别按钮, ...
- Laravel查询构造器的使用方法整理
1.结果集 1.1从一张表获取所有行,get方法获取所有行 $users = DB::table('users')->get(); 获取列的值 foreach ($users as $user) ...
- POPTEST老李谈钩子
poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询qq:908821478,咨询电话010-845052 ...
- [转]使用sklearn进行集成学习——理论
转:http://www.cnblogs.com/jasonfreak/p/5657196.html 目录 1 前言2 集成学习是什么?3 偏差和方差 3.1 模型的偏差和方差是什么? 3.2 bag ...
- 2017携程Web前端实习生招聘笔试题总结
考察encodeURI encodeURI(), decodeURI()它们都是Global对象的方法. encodeURI()通过将某些字符的每个实例替换代表字符的UTF-8编码的一个或多个转义字符 ...
- es6 module + webpack
其实在之前本人就看了 es6 里面的一部分内容,当然是阮一峰大神的 ECMAScript 6 入门. 最近闲来无事又来看下,其中 Module 的语法 这章时候,用里面代码跑的时候,理所当然的报错 S ...
- Python中字符串拼接的三种方式
在Python中,我们经常会遇到字符串的拼接问题,在这里我总结了三种字符串的拼接方式: 1.使用加号(+)号进行拼接 加号(+)号拼接是我第一次学习Python常用的方法,我们只需要把我们要加 ...
- Apriori算法介绍(Python实现)
导读: 随着大数据概念的火热,啤酒与尿布的故事广为人知.我们如何发现买啤酒的人往往也会买尿布这一规律?数据挖掘中的用于挖掘频繁项集和关联规则的Apriori算法可以告诉我们.本文首先对Apriori算 ...
- Unity 检测物体是否在相机视野范围内
需求: 类似NPC血条,当NPC处于摄像机视野内,血条绘制,且一直保持在NPC头顶. 开始: 网上查找资料,然后编写代码: public RectTransform rectBloodPos; voi ...