以下内容基本来自《算法笔记》,作者为胡凡,建议直接买书看,我这里只是摘抄部分当笔记,不完整的。

简单模拟

就是一类“题目怎么说你就怎么做”的题目。这类题目不涉及算法,只是根据题目描述来进行代码的编写。

例子:

思路:

#include <cstdio>
init main() {
int n, step = 0;
scanf("%d", &n);
while(n != 1) {
if(n%2==0) {
n = n / 2;
}
else {
n = (3*n+1) / 2;
}
++step; // 计数器加1
}
printf("%d\n", step);
return 0;
}

查找元素

要求就是给定一些元素,然后查找某个满足某条件的元素。一个典型的算法就是二分查找。

思路:

#include <cstdio>
const int maxn = 210;
int a[maxn]; // 存放给定的元素
int main() {
int n, x;
while(scanf("%d", &n) != EOF) {
for(int i=0; i < n; ++i) {
scanf("%d", &a[i]); // 输入元素的个数
}
scanf("%d", &x); //输入要查询的元素
int k; // 下标
for(k=0; k<n; ++k) { // 遍历数组
if(a[k] == x) { // 找到了
printf("%d\n", k);
break;
}
}
if(k==n) { // 没有找到
printf("-1\n");
}
}
}

图形输出

给定规则,要求按照规则用输出字符的方式来画图。

做法一般两种:

  1. 通过规律直接输出
  2. 定义一个二位字符数组,按照规律填充内容,然后输出整个二维数组

例子:

思路:

注意点:

#include <cstdio>
int main() {
int row, col;
char c;
scanf("%d %c", &col, &c);
if(col % 2 == 1) {
row = col / 2 + 1;
}
else {
row = col / 2;
}
for(int i=0; i<col; ++i) {
printf("%c", c);
}
printf("\n");
for(int i=2; i < row; ++i) {
printf("%c", c);
for(int j=0; j<col-2; ++j) {
printf(" ");
}
printf("%c\n", c);
}
for(int i=0; i<col; ++i) {
printf("%c", c);
}
return 0;
}

日期处理

这种类型主要是细节比较繁杂,细心处理好了就很简单了。

思路:

#include <cstdio>
int month[13][2] = {
{0, 0}, {31, 31}, {28, 29}, {31, 31}, {30, 30}, {31, 31}, {30, 30}, {31, 31}, {31, 31}, {30, 30}, {31, 31}, {30, 30}, {31, 31}
}; bool isLeap(int year) {
return (year%4==0 && year%100!=0) || (year%400==0);
} int main() {
int time1, y1, m1, d1;
int time2, y2, m2, d2;
while(scanf("%d%d", &time1, &time2) != EOF) {
// 确保大的日期在time2
if(time1 > time2) {
int tmp = time1;
time1 = time2;
time2 = tmp;
}
// 提取时间
y1 = time1 / 10000, m1 = time1 % 10000 / 100, d1 = time1 % 100;
y2 = time2 / 10000, m2 = time2 % 10000 / 100, d1 = time1 % 100;
int ans = 1;
while(y1 < y2 || m1 < m2 || d1 < d2) {
++d1;
// 当天数超出该月最大天数,月份+1,天数归一
if(d1 == month[m1][isLeap(y1)] + 1) {
++m1;
d1 = 1;
}
// 和上面类似
if(m1 == 13) {
++y1;
m1 = 1;
}
++ans;
}
printf("%d\n", ans);
}
return 0;
}

进制转换

转为10进制:

int y=0, product = 1;
while(x != 0) {
y = y + (x % 10) * product;
x = x / 10;
product = product * P; // P进制
}

转为Q进制:

int z[40], num = 0; // z存放Q进制数y的每一位,num为位数
do {
z[num++] = y % Q;
y = y / Q;
} while(y!=0);

字符串处理

就是字符串处理……

例子:

思路:

这里的思路是通过字符串来判断的,其实还有别的方法,不过这里就不细说了。

#include <cstdio>
#include <cstring> const int maxn = 256; bool judge(char str[]) {
int len = strlen(str);
for(int i=0; i<len/2; ++i) {
if(str[i] != str[len-1-i]) {
return false;
}
}
return true;
} int main() {
char str[maxn];
while(gets(str)) {
bool flag = judge(str);
if(flag==true) {
printf("YES\n");
}
else {
printf("NO\n");
}
}
return 0;
}

吐槽下,这里的代码其实都是C语言的风格,不过我暂时不想改,因为我目前没办法访问CodeUp,不确定改了之后一定没问题(虽然说就算没改也不确定就是了)。

嘛,目前就这些。

C++笔记(7)——一些模拟题:简单模拟、查找元素、图形输出、日期处理、进制转换、字符串处理的更多相关文章

  1. HDU4814——数学,模拟进制转换

    本题围绕:数学公式模拟进制转换 HDU4814 Golden Radio Base 题目描述 将一个十进制的非负整数转换成E(黄金分割数)进制的数 输入 不大于10^9的非负整数,处理到文件尾 输出 ...

  2. Java基础笔记(3) 进制与进制转换

    ---恢复内容开始--- 进制 在一般生活中,我们一直在应用的十进制,就是逢十进一,而今天我们要接触的是,计算机编程常用的进制!首先我们要知道,计算机内部运算采用的是二进制,也就是逢二进制! 1.什么 ...

  3. 进制转换(NOIP2000&NOIP水题测试(2017082301))

    题目链接:进制转换 这题得明白其中的数学方法,明白后就不难了. 那么我们应该怎么计算呢? 其实也很简单. 我们依然采取辗转相除法. 但是,对于负的余数,我们需要进行一些处理. 我们怎么处理呢? 很简单 ...

  4. PAT甲级 进制转换题_C++题解

    进制转换题 PAT (Advanced Level) Practice 进制转换题 目录 <算法笔记> 重点摘要 1015 Reversible Primes (20) 1019 Gene ...

  5. poj1220:高精度进制转换模板题

    今天撸3708  一直奇怪的re 就先放下了,写这个题的过程中学习了一个高精度进制转换,用这个模板写了1220 记录一下: #include <iostream> #include < ...

  6. ZOJ 3542 2011大连现场赛D题(简单模拟)

    Hexadecimal View Time Limit: 2 Seconds       Memory Limit: 65536 KB Hexadecimal is very important an ...

  7. hdu4814 模拟(黄金分割进制转换)

    题意:       给你一个十进制数,让你把他转化成Q进制数,Q是黄金分割比 = (1+√5)/2. 思路:        首先要明确的就是虽然q是实数,但是依然可以转换成q进制数,因为任何数num, ...

  8. 用C#简单实现的36进制转换代码

    private const string initValue = "A0000001"; private static string cs = "0123456789AB ...

  9. HDU 4432 Sum of divisors (水题,进制转换)

    题意:给定 n,m,把 n 的所有因数转 m 进制,再把各都平方,求和. 析:按它的要求做就好,注意的是,是因数,不可能有重复的...比如4的因数只有一个2,还有就是输出10进制以上的,要用AB.. ...

随机推荐

  1. A Magic Lamp HDU - 3183 (逆向贪心/RMQ)

    Kiki likes traveling. One day she finds a magic lamp, unfortunately the genie in the lamp is not so ...

  2. [工具] BurpSuite--Intruder功能

    BurpSuite--Intruder功能 0x00 配置说明 intruder是进行爆破的,基本流程是标注请求的爆破参数,然后配置字段,选择爆破方式进行爆破,下面来记录下工具的使用 选中intrud ...

  3. 火车采集用到的access查询命令小结

    #For zencart #图片网址路径替换 UPDATE Content SET v_products_image=replace(v_products_image, '<img src=&q ...

  4. [USACO12FEB]牛券Cow Coupons(堆,贪心)

    [USACO12FEB]牛券Cow Coupons(堆,贪心) 题目描述 Farmer John needs new cows! There are N cows for sale (1 <= ...

  5. c字符串函数

    1.  bcmp(3) 类ma似于strncmp(3) 但是比较结果不一定是两个字符的ascii码之差. 返回值:相等0,不相等非零(不一定是-1) 2.bcopy(3)类ma似于strncpy(3) ...

  6. JAVA笔记14-线程

    一.概念 线程:是一个程序里面不同的执行路径,每一个分支都叫线程.到现在为止我们所讲的程序分支只有一个,即main方法,称作主线程. 进程:class文件,exe文件.程序的执行过程:程序放入代码区( ...

  7. shell练习--PAT题目1003:我要通过!(成功案例)

    “答案正确”是自动判题系统给出的最令人欢喜的回复.本题属于 PAT 的“答案正确”大派送 —— 只要读入的字符串满足下列条件,系统就输出“答案正确”,否则输出“答案错误”. 得到“答案正确”的条件是: ...

  8. Kotlin使用率达35%,Java要退位了?

    在今年的Google I/O大会上,关于Kotlin,Google只说了只言片语: 在过去一年里,有35%的专业Android开发者在使用Kotlin,其中95%的开发者都对Kotlin非常满意. 之 ...

  9. XML 验证器

    XML 错误会终止您的程序 XML 文档中的错误会终止你的 XML 程序. W3C 的 XML 规范声明:如果 XML 文档存在错误,那么程序就不应当继续处理这个文档.理由是,XML 软件应当轻巧,快 ...

  10. eclipse中使用maven搭建多模块项目

    暂时参考:https://blog.csdn.net/u012343297/article/details/79883870