书上具体所有题目: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. React虚拟DOM具体实现——利用节点json描述还原dom结构

    前两天,帮朋友解决一个问题: ajax请求得到的数据,是一个对象数组,每个对象中,具有三个属性,parentId,id,name,然后根据这个数据生成对应的结构. 刚好最近在看React,并且了解到其 ...

  2. Jquery EasyUI远程校验,Jquery EasyUI多个自定义校验,EasyUI自定义校验

    >>>>>>>>>>>>>>>>>>>>>>>>> ...

  3. vuejs单一事件管理组件间的通信

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. 怎样获得PRINCE2证书?报名PRINCE2有什么条件?

    参加培训:想要获得PRINCE2资格证书,参加培训是非常必要的,正规的培训机构有获得组织认证考试的权力.光环国际全年开设prince2课程班,全国各个地区均可以选择培训及考试 选择培训机构:只有经AP ...

  5. Idea Maven 建本地仓库-导入本地JAR包

    需求 IDEA 很方便集成了Maven,但是也有相应的问题,比如使用Maven仓没有包的时候不太方便,这时我们需要建立自已的本地仓库来实现 实现 找到Idea的安装目录下面的Maven,我的在 C:\ ...

  6. IOS开发创建开发证书及发布App应用(六)——打包应用

    6.打包应用 如下图,生成之后点击下面红框的按钮,按时间排序,然后点最新的一次生成 从右侧生成日志中找到如下图红框标识的部分,找到 -output ,把下面浅蓝色选中,这是app生成的文件夹路径 点击 ...

  7. 【转】FLEX中SharedObject介绍及应用

    ShareObject介绍: 1 ShareObject,顾名思义共享对象,而通常意义上的共享,从B/S结构上来讲,无非是客户端(浏览器端)的共享和服务器端的共享了,不错,ShareObject刚好份 ...

  8. 手机自动化测试:Appium源码分析之跟踪代码分析九

    手机自动化测试:Appium源码分析之跟踪代码分析九   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家 ...

  9. ArcGIS API for JavaScript 4.2学习笔记[20] 使用参数查询要素(油井和地震关系)

    这个例子相当复杂.我先简单说说这个例子是干啥的. 在UI上,提供了一个下拉框.两个滑动杆,以确定三个参数,使用这三个参数进行空间查询.这个例子就颇带空间查询的意思了. 这个例子是干嘛的呢?第一个参数是 ...

  10. ajax 大洋与小样的第二步

    一.Ajax的对象 XMLHttpRequest的方法 方法 描述 abort() 停止当前请求 getAllResponseHeaders() 把 HTTP请求的所有响应首部作为健/值对返回 get ...