书上具体所有题目:http://pan.baidu.com/s/1hssH0KO

都是《算法竞赛入门经典(第二版)》的题目,标题上没写(第二版)

题目:算法竞赛入门经典 3-7/UVa1368:DNA Consensus String

代码:

//UVa1368 - DNA Consensus String
#include<iostream>
using namespace std; #define MAX_M 52
#define MAX_N 1005
char DNA[MAX_M][MAX_N]; int main()
{
int T, m, n, err, num[4];//num用于存放ACGT个数
const int &mm = m, &nn = n;//防止自己代码书写错误
char consensus[MAX_N], ACGT[] = "ACGT";//consensus为计算结果
cin >> T;
while (T--) {
err = 0;
cin >> m >> n;
cin.getline(DNA[51], 3);//吸收'\n'
for (int i = 0;i < mm;++i)
cin.getline(DNA[i], MAX_N);
for (int i = 0;i < nn;++i) {
num[0] = num[1] = num[2] = num[3] = 0;//初始化或重置num
for (int j = 0;j < mm;++j)
switch (DNA[j][i]) {
case 'A': ++num[0];break;
case 'C': ++num[1];break;
case 'G': ++num[2];break;
case 'T': ++num[3];break;
default:cerr << "Error:1\n";exit(0);
}
int max = 0;
for (int j = 1;j < 4;++j)
if (num[j]>num[max])max = j;
consensus[i] = ACGT[max];
err += mm - num[max];
}
consensus[nn] = '\0';
cout << consensus << '\n' << err << '\n';
}
return 0;
}

分析:找出每个DNA序列的第i个的碱基,找到出现最多的项,即为Consensus String的第i个碱基

在算法竞赛入门经典里看到使用常量数组的方法,可以有效减少switch与if的使用,感觉很好用(虽然记得学校教材上也讲到过,但是当时没那么印象深刻)。于是这次在ACGT[]=”ACGT”这里用到了,真心好用呀。

题目:算法竞赛入门经典 3-8/UVa202:Repeating Decimals

代码:

//UVa202 - Repeating Decimals
#include<iostream>
using namespace std; #define MAX 502
unsigned Decimal[MAX];//存放各个小数
unsigned Remainder[MAX];//存放各位小数对应的余数 int main()
{
unsigned numerator, denominator;//分子、分母
const unsigned &de = denominator;
int temp, digit;//由于分母可以正可以负,先输入temp至int再转为unsigned,digit记录位数(或者说是位数-1)
while (cin >> numerator) {
cin >> temp;
digit = 0;
cout << numerator << '/' << temp << " = ";
if (temp < 0)temp = -temp, cout << '-';
denominator = (unsigned)temp;
cout << numerator / de << '.';
Decimal[0] = (numerator % de * 10) / de;
Remainder[0] = (numerator % de * 10) % de;
while (digit < MAX) {
unsigned di, t = Remainder[digit++] * 10;
Decimal[digit] = t / de;
Remainder[digit] = t % de;
for (di = 0;di < digit;++di)
if (Decimal[di] == Decimal[digit] && Remainder[di] == Remainder[digit])
break;
if (di < digit) {
for (int i = 0;i < di;++i)
cout << Decimal[i];
cout << '(';
if (digit - di <= 50)
for (int i = di;i < digit;++i)
cout << Decimal[i];
else {
for (int i = 0;i < 50;++i)
cout << Decimal[di+i];
cout << "...";
}
cout << ")\n\t" << digit - di << " = number of digits in repeating cycle\n\n";
break;
}
}
if (digit == MAX) { cerr << "Error:1\n";exit(0); }
}
return 0;
}

分析:算出下一位小数b并与之前每一位小数比较,如果找到一位小数a,a的小数值与对应的余数均与b的小数与余数相等,则这两个数a—-b之间的就是循环部分。想不出好办法,不是所有小数都是像1/3一样从第一位开始洗脑循环。

题目:算法竞赛入门经典 3-9/UVa10340:All in All

代码:

//UVa10340 - All in All
#include<iostream>
#define M 101000
char s[M], t[M], *ps, *pt;//s短t长
int main()
{
while (std::cin>>s>>t) {
//为什么scanf按了crtl^z还是不停止,还得再按一下回车才能结束程序。。。
//于是使用scanf导致提交总是超时,因为程序还在等着输入
//而cin只要按一下crtl^z再回车,马上就结束了。不懂。。
//好吧,于是虽然试图尽量少用cin cout,但是c的东西还是不大会用,不熟练
ps = s, pt = t;
while (*ps != '\0') {
while (*pt != *ps&&*pt != '\0')++pt;
if (*pt == '\0') break;
++ps,++pt;
}
printf(*ps == '\0' ? "Yes\n" : "No\n");
}
return 0;
}

分析:不难(上面用cin下面用printf是不是有点违和。。)

[刷题]算法竞赛入门经典 3-7/UVa1368 3-8/UVa202 3-9/UVa10340的更多相关文章

  1. [刷题]算法竞赛入门经典 3-12/UVa11809

    书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 题目:算法竞赛入门经典 3-4/UVa11809:Floating-Point Numbers 代码: //UVa11 ...

  2. [刷题]算法竞赛入门经典 3-1/UVa1585 3-2/UVa1586 3-3/UVa1225

    书上具体所有题目:http://pan.baidu.com/s/1hssH0KO(我也是在网上找到的pdf,但不记得是从哪里搜刮到的了,就重新上传了一遍) PS:第一次写博客分享我的代码,不知道我对c ...

  3. [刷题]算法竞赛入门经典 3-10/UVa1587 3-11/UVa1588

    书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 题目:算法竞赛入门经典 3-10/UVa1587:Box 代码: //UVa1587 - Box #include&l ...

  4. [刷题]算法竞赛入门经典 3-4/UVa455 3-5/UVa227 3-6/UVa232

    书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 题目:算法竞赛入门经典 3-4/UVa455:Periodic Strings 代码: //UVa455 #inclu ...

  5. [刷题]算法竞赛入门经典(第2版) 4-6/UVa508 - Morse Mismatches

    书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 代码:(Accepted,10 ms) //UVa508 - Morse Mismatches #include< ...

  6. [刷题]算法竞赛入门经典(第2版) 5-15/UVa12333 - Revenge of Fibonacci

    题意:在前100000个Fibonacci(以下简称F)数字里,能否在这100000个F里找出以某些数字作为开头的F.要求找出下标最小的.没找到输出-1. 代码:(Accepted,0.250s) / ...

  7. [刷题]算法竞赛入门经典(第2版) 5-13/UVa822 - Queue and A

    题意:模拟客服MM,一共有N种话题,每个客服MM支持处理其中的i个(i < N),处理的话题还有优先级.为了简化流程方便出题,设每个话题都是每隔m分钟来咨询一次.现知道每个话题前来咨询的时间.间 ...

  8. [刷题]算法竞赛入门经典(第2版) 4-5/UVa1590 - IP Networks

    书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 代码:(Accepted,0 ms) //UVa1590 - IP Networks #include<iost ...

  9. [刷题]算法竞赛入门经典(第2版) 6-7/UVa804 - Petri Net Simulation

    题意:模拟Petri网的执行.虽然没听说过Petri网,但是题目描述的很清晰. 代码:(Accepted,0.210s) //UVa804 - Petri Net Simulation //Accep ...

随机推荐

  1. Python可视化学习(1):Matplotlib的配置

    Matplotlib是一个优秀的可视化库,它提供了丰富的接口,让Python的可视化落地显得非常容易上手.本系列是本人学习python可视化的学习笔记,主要用于监督自己的学习进度,同时也希望和相关的博 ...

  2. 常见【十种】WEB攻击及防御技术总结

    最近参加了一个WEB安全培训,感觉WEB攻击跟防御都是挺有意思的.以下总结比较简短,仅供观赏哈. 一.XSS攻击 [介绍] xss攻击是跨站脚本攻击,例如在表单中提交含有可执行的javascript的 ...

  3. h5开发app之在线生成二维码

    h5通过jquery和qrcode在线生成二维码 首先我们需要下载一个qrcode.js文件,然后依次引入jquery和qrcode文件. 1.创建一个输入框以便做演示使用: <input id ...

  4. 如何使用CocoaPods

    如何使用CocoaPods 1.进入主目录下 cd /Users/HYYT/Desktop/支付功能/微信支付宝集成/支付宝微信支付集成 2.建立Podfile(配置文件) 2.1  输入:vim P ...

  5. 脚本语言:Xmas(一)

    很偶然的一个想法,在从北京回成都的高铁上:我想要一个计算器.于是在火车上花了十来个小时,完成了一个模型:能够处理+-*/的优先级,以及"()",比如:1+(3+2)*4.这已是一年 ...

  6. activiti 一个流程的运转步骤 以请假流程为例

    ---为了加深对activiti的理解记忆,对自己做的一个流程进行自述.加强记忆 请假实例 一.设计请假的流程图以及流程文件,完善对应数据项,比如用户信息,请假单信息 --请假单 --流程图 --流程 ...

  7. 爬虫入门系列(二):优雅的HTTP库requests

    在系列文章的第一篇中介绍了 HTTP 协议,Python 提供了很多模块来基于 HTTP 协议的网络编程,urllib.urllib2.urllib3.httplib.httplib2,都是和 HTT ...

  8. Java Script 字符串操作

    JS中常用几种字符串操作: big() small() bold() fontcolor() fontsize() italics() strike() link() charAt() charCod ...

  9. CSS也需要重构

    最初接触到的CSS面向对象,是项目里的CSS超过8千行,缺乏约束和管理,在近期或不远的将来,有迫切的要求需要重构.CSS面向对象和模块化. CSS代码遇到的问题: 重用性差,看着一个CSS的名称,很难 ...

  10. Why we don’t recommend using List<T> in public APIs

    不推荐List<T>做API原因有如下两点:1.首先List<T> 设计之初就没有设计成可扩展的,我们不能重新其任何方法.这就意味着,我们操作List<T>的时候却 ...