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

简单模拟

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

例子:

思路:

#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. 伸展树splay之求区间极值

    前言 这篇博客是根据我在打这道题的时候遇到的问题,来打的,有些细节可能考虑不到. 题目 在N(1<=N<=100000)个数A1-An组成的序列上进行M(1<=M<=10000 ...

  2. IDC装机检查思路

    交换机网口 网线 配线架 服务器网口灯 系统网卡驱动

  3. IDC机房跳线

    服务网卡口与配线架 这里有一根网线 记录方式 签 A:23FM-23U-T07 (配线架网线) B:23FM-23U-NIC1(服务器网线) 在配线架的机柜旁边一定写明了 跳线的对面的   交换和配线 ...

  4. Python 爬虫十六式 - 第五式:BeautifulSoup-美味的汤

    BeautifulSoup 美味的汤 学习一时爽,一直学习一直爽!    Hello,大家好,我是Connor,一个从无到有的技术小白.上一次我们说到了 Xpath 的使用方法.Xpath 我觉得还是 ...

  5. Codeforces Round #345 (Div. 2) E. Table Compression 并查集+智商题

    E. Table Compression time limit per test 4 seconds memory limit per test 256 megabytes input standar ...

  6. 【bzoj3672&&uoj7】[Noi2014]购票

    *题目描述: 今年夏天,NOI在SZ市迎来了她30周岁的生日.来自全国 n 个城市的OIer们都会从各地出发,到SZ市参加这次盛会. 全国的城市构成了一棵以SZ市为根的有根树,每个城市与它的父亲用道路 ...

  7. 序列式容器————list

    list是一个线性双向链表结构,它的数据由若干个节点构成,每一个节点都包括一个信息块(即实际存储的数据).一个前驱指针和一个后驱指针. 它无需分配指定的内存大小且可以任意伸缩,这是因为它存储在非连续的 ...

  8. js控制手机保持亮屏的库,解决h5移动端,自动息屏问题

    一些说明:我用Laya(ts)开发小游戏,有需要保持手机屏幕常亮的需求(非必须的),然后作为小白的我就在网上找到了这个库,大概了解下,应该是通过播放空视频的原理来保持手机屏幕常亮,然后就放到项目中试了 ...

  9. wannalfy 挑战赛7 E 珂朵莉与GCD (离线+线段树/树状数组)

    链接:https://www.nowcoder.com/acm/contest/56/E 时间限制:C/C++ 5秒,其他语言10秒 空间限制:C/C++ 716800K,其他语言1433600K 6 ...

  10. maven 私服的setting.xml配置

    <?xml version="1.0" encoding="UTF-8"?> 2 <settings xmlns="http://m ...