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

简单模拟

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

例子:

思路:

#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. sudo 及visudo用法

    visudo 编辑sudoers文件 1.命令功能 bisudo命令是专门用来编辑/etc/sudoers文件,同时提供语法检查等功能./etc/sudoes文件是sudo命令的配置文件. 2.语法格 ...

  2. jmeter之HTTP信息管理器、正则表达式联合使用(获取登录session

    如图所示,信息管理头的信息为请求头信息,如图所示 注意事项:1)body date里面的参数要是要注意英文编写条件下,可以通过https://www.json.cn/在线的json格式刷格式 2)注意 ...

  3. pymysql ,主键, 索引

    目录 一.pymysql模块的使用 1. 安装pymysql 2. 连接MySQL 3. sql注入问题 二.索引 1. 什么是索引 2. 索引有什么用 3. 索引的底层原理 4. 主键 5. MyS ...

  4. pandas的corsstab

      pandas.crosstab(index, columns, values=None, rownames=None, colnames=None, aggfunc=None, margins=F ...

  5. mongodb导出导入实例记录

    mongodb导出导入实例记录 平时很用mongodb,所以用到了,就需要去网上搜索方法,干脆将自己的实际经历记录下来,方便日后使用. # 大致需求 源库:db_name_mongo 源IP:192. ...

  6. UC

    public class Test{ public static void main(String args[]){ int i[]= new int[1]; System.out.println(i ...

  7. python导入不同目录下的自定义模块

    一.代码目录结构 自定义的模块在Common包下,Study文件下SelectionSort.py文件导入自定义的模块 二.源码 2.1:SelectionSort.py文件   python导包默认 ...

  8. 基于STM32的CRC校验说明

    ///***************************************************************************** //下面是test.c里面的函数 // ...

  9. webUploader---实现大文件断点续传

    核心原理: 该项目核心就是文件分块上传.前后端要高度配合,需要双方约定好一些数据,才能完成大文件分块,我们在项目中要重点解决的以下问题. * 如何分片: * 如何合成一个文件: * 中断了从哪个分片开 ...

  10. php如何实现大文件断点续传-php文件

    总结一下大文件分片上传和断点续传的问题.因为文件过大(比如1G以上),必须要考虑上传过程网络中断的情况.http的网络请求中本身就已经具备了分片上传功能,当传输的文件比较大时,http协议自动会将文件 ...