[C++]H106OJ-第二周练习总结
题目一:幸运数
Description
幸运数是波兰数学家乌拉姆命名的。它采用与生成素数类似的“筛法”生成。
首先从1开始写出自然数1,2,3,4,5,6,....
1 就是第一个幸运数。
我们从2这个数开始。把所有序号能被2整除的项删除,变为:
1 _ 3 _ 5 _ 7 _ 9 ....
把它们缩紧,重新记序,为:
1 3 5 7 9 .... 。这时,3为第2个幸运数,然后把所有能被3整除的序号位置的数删去。注意,是序号位置,不是那个数本身能否被3整除!! 删除的应该是5,11, 17, ...
此时7为第3个幸运数,然后再删去序号位置能被7整除的(19,39,...)
最后剩下的序列类似:
1, 3, 7, 9, 13, 15, 21, 25, 31, 33, 37, 43, 49, 51, 63, 67, 69, 73, 75, 79, ...
Input
输入两个正整数m n, 用空格分开 (m < n < 1000*1000)
Output
程序输出 位于m和n之间的幸运数的个数(不包含m和n)。
Sample Input 1
1 20
Sample Output 1
5
思路:
题目中写出,1作为第一个幸运数,但是是用2处理的。利用2将数列处理完毕后,3才变成第二个幸运数,后续就正常了。所以,先将利用2处理好的数列这种特殊先处理出来,然后用循环进行常规处理在循环中利用变量len统计新的幸运数队列的长度,然后调节for循环次数即可。代码如下:
#include<iostream>
using namespace std;
const int N = 1e6 + 30;int n, m, cnt;
int a[N], b[N];int main()
{cin >> n >> m;int len = 0, pos = 0;for(int i = 1; i <= m; i ++) a[++ len] = i;for(int i = 1; i <= len; i ++)if(i % a[2] != 0)b[++ pos] = a[i];len = 0;for(int i = 2; i <= pos; i ++){int idx = b[i];for(int j = 1; j <= pos; j ++)if(j % idx != 0)b[++ len] = b[j];pos = len;len = 0;}for(int i = 1; i <= pos; i ++)if(b[i] > n && b[i] < m)cnt ++;cout << cnt;return 0;
}
题目二:P1003
Description
作为一名网络警察,你的任务是监视电子邮件,看其中是否有一些敏感的关键词。不过,有些狡猾的犯罪嫌疑人会改变某些单词的字母顺序,以逃避检查。请编写一个程序,发现这种调整过顺序的关键词。程序的输入有两行,第一行是关键词列表,第二行是待检查的句子。程序的输出为在该句子中所找到的经过顺序调整的关键词。(单词全部为小写,单词之间以一个空格分隔,每一行的单词个数不限)
Input
第一行是关键词列表,第二行是待检查的句子。
Output
经过顺序调整的关键词。(单词全部为小写,单词之间以一个空格分隔,每一行的单词个数不限)
Sample Input 1
guns mines missiles aameric ssell snug dan iimsssle ot sit neeemis
Sample Output 1
guns missiles
思路:
对于退出一行的输入,可利用cin.get() == '\n'来判断是否break。利用vector结合map容器来存储数据。利用可变长数组以及map以字典序自动排序的性质。对于每一个单词,都存储三个属性:ASCII码值(字符串码值采取每个字符码值和)、字符、字符出现次数判断部分,对于任意两个单词,若ASCII码值相等,且字符种类以及出现次数均相同,则判定为同一单词。代码如下:
#include<map>
#include<vector>
#include<iostream>
using namespace std;
const int N = 1e5 + 10;int pos, idx;
string date[N];
map<string, int> output;
vector<pair<int, map<char, int>>> k, c;int main()
{string str;while (cin >> str){int H = 0;map<char, int> m;for (int i = 0; i < str.length(); i++)m[str[i]]++, H += str[i];k.push_back({ H,m });date[pos++] = str;if (cin.get() == '\n')break;}while (cin >> str){int H = 0;map<char, int> m;for (int i = 0; i < str.length(); i++)m[str[i]]++, H += str[i];c.push_back({ H,m });if (cin.get() == '\n')break;}vector<pair<int, map<char, int>>>::iterator i = c.begin();while(i != c.end()){vector<pair<int, map<char, int>>>::iterator j = k.begin();idx = 0;while(j != k.end()){if ((*i).first == (*j).first){bool print = true;map<char, int>::iterator itm = (*j).second.begin(), itn = (*i).second.begin();while(itm != (*j).second.end()){if ((*itm).first == (*itn).first){if((*itm).second != (*itn).second)print = false;}else print = false;itm++;itn++;}if (print)output[date[idx]]++;}idx++;j++;}i++;}map<string, int>::iterator it = output.begin();while(it != output.end()){cout << (*it).first << " ";it++;}return 0;
}
题目三:找素数
Description
给定区间[L, R] , 请计算区间中素数的个数。
Input
两个数L和R。
Output
一行,区间中素数的个数。
Sample Input 1
2 11
Sample Output 1
5
思路:
代码如下:
#include<iostream>
#include<cstring>
#include<cmath>
using namespace std;
typedef long long ll;
const int inf=2147483647,N=1000010;
int l,r;
int prim[N],cnt;
bool st[N];
void init()
{for(int i=2;i<=sqrt(inf);i++){if(!st[i]) prim[cnt++]=i;for(int j=0;prim[j]<=sqrt(inf)/i;j++){st[prim[j]*i]=1;if(i%prim[j]==0) break;}}
}
int main()
{init();memset(st,0,sizeof st);cin>>l>>r;for(int i=0;i<cnt;i++){for(int j=(l+prim[i]-1)/prim[i];j<=r/prim[i];j++)if(j!=1)st[prim[i]*j-l]=1;}int ans=0;for(int i=0;i<=r-l;i++)ans+=!st[i];cout<<ans;return 0;
}
题目四:凶手
Description
巴斯维克命案抓住了六个嫌疑犯,他们的口供如下:
A:我不是罪犯
B:A、C中有一个是罪犯
C:A和B说了假话
D:C和F说了假话
E:其他五个人中,只有A和D说了真话
F:我是罪犯
他们中只有一半说了真话,凶手只有一个。
本题可能有多种可能性,即正确答案(找到唯一的凶手)可能有多个,但每一个可能的答案(某一个是凶手)都满足上述口供。
请编程找出可能的凶手输出。
样例:(假设唯一的凶手是A或者D或者E,则输出结果为三行,按字母顺序依次输出)
A
D
E
Input
如题所示。
Output
如题所示。
代码如下:
#include<iostream>
#include<cstring>
using namespace std;int cnt;
bool is_c[6];bool A()
{return is_c[0];
}bool B()
{return is_c[1] || is_c[2];
}bool C()
{return A() && B();
}bool F()
{return is_c[5];
}bool D()
{return C() && F();
}bool E()
{return A() && D();
}int main()
{memset(is_c, false, sizeof is_c);for(int i = 0; i < 6; i ++){cnt = 0;is_c[i] = true;if(A()) cnt++;if(B()) cnt++;if(C()) cnt++;if(D()) cnt++;if(E()) cnt++;if(F()) cnt++;if(cnt == 3) printf("%c\n", i + 'A');}return 0;
}
[C++]H106OJ-第二周练习总结相关推荐
- 20165334 四则运算阶段性总结(第二周)
四则运算阶段性总结(第二周) 结对对象 学号 :20165334 姓名 : 李天龙 担任角色 (驾驶员):李天龙 (副驾驶):陈国超 一.实验实现步骤 整数计算类 分数计算类 自动生成题目的类 测试结 ...
- 20155222 第二周测试
20155222 第二周测试 1 vi 每个.c一个文件,每个.h一个文件,文件名中最好有自己的学号 用Vi输入图中代码,并用gcc编译通过 在Vi中使用K查找printf的帮助文档 提交vi编辑过程 ...
- Emojify - v2 吴恩达老师深度学习第五课第二周编程作业2
吴恩达老师深度学习第五课第二周编程作业2,包含答案! Emojify! Welcome to the second assignment of Week 2. You are going to use ...
- Operations on word vectors-v2 吴恩达老师深度学习课程第五课第二周编程作业1
吴恩达老师深度学习课程第五课(RNN)第二周编程作业1, 包含答案 Operations on word vectors Welcome to your first assignment of thi ...
- Linux第二周学习笔记(7)
Linux第二周学习笔记(7) 2.13 文档查看cat_more_less_head_tail (1). cat命令 cat命令:用于查看一个文件的内容并将其显示在屏幕上 cat-A命令:显示所有的 ...
- 2月第二周.COM增近12万 ×××域名.XXX减122个
IDC评述网(idcps.com)02月18日报道:根据Registrar Stats实时数据,截至2014年2月16日,全球.COM域名注册总量已达到了112,369,017个,环比上周新增近12万 ...
- 机电传动控制第二周学习笔记
机电传动控制第二周学习笔记 经过第二周的学习,我了解了电机的发展历史.从奥斯特发现电生磁的现象,到法拉第电磁回转实验,再到后来的电机一步步的发展至今.它充满了巧合,但是它又必然一步步向更完美走去.电机 ...
- Linux第二周学习笔记(11)
Linux第二周学习笔记(11) 2.17 隐藏权限lsattr_chattr chattr命令:是设置吟唱隐藏权限的命令,更改Linux文件系统上的文件属性. 参数说明: A:表示文件或目录的ati ...
- LINUX内核分析第二周学习总结——操作系统是如何工作的
LINUX内核分析第二周学习总结--操作系统是如何工作的 张忻(原创作品转载请注明出处) <Linux内核分析>MOOC课程http://mooc.study.163.com/course ...
- 分享Kali Linux 2017年第二周镜像文件
分享Kali Linux 2017年第二周镜像文件 Kali Linux官方于1月10日发布2017年的第2周镜像.这也是从去年12月11日后,第一次周更新.这次更新保持以往规律,仍然是11个镜像文件 ...
最新文章
- Python是一门什么样的语言
- collections 使用教程
- sql脚本过大,无法打开的解决方法
- javabean和java类_java对象 POJO和JavaBean的区别
- 封装jQuery Validate扩展验证方法
- java 通过TCP\UDP 协议实现多人聊天,点对点,文件传送-----分服务器端和客户端...
- Keil5下载及安装
- 能耗监测管理系统服务器,能源管理系统:能耗监测系统解决方案
- ubuntu串口助手推荐——comtool
- 重复渐变过渡 百分比
- 数据库中delete和drop的区别
- 95%置信区间的含义_置信度为95%的置信区间什么意思
- 使用Quick BI 制作企业数据分析报表
- SQLPro for SQLite for Mac(SQLite编辑器)
- Android Q notification创建发送流程-framework篇
- AP5126 DC/DC 平均电流型 降压恒流驱动芯片
- 基于腾讯地图定位组件实现周边公用厕所远近排序分布图
- 超级计算机有关文献,超级计算机系统性能平衡性预先评价方法研究
- SHEEL-远程调用执行命令模板
- CAN通讯程序C语言,嵌入式C语言环境下的CAN总线通讯协议