C++笔记(7)——一些模拟题:简单模拟、查找元素、图形输出、日期处理、进制转换、字符串处理
以下内容基本来自《算法笔记》,作者为胡凡,建议直接买书看,我这里只是摘抄部分当笔记,不完整的。
简单模拟
就是一类“题目怎么说你就怎么做”的题目。这类题目不涉及算法,只是根据题目描述来进行代码的编写。
例子:
思路:
#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");
}
}
}
图形输出
给定规则,要求按照规则用输出字符的方式来画图。
做法一般两种:
- 通过规律直接输出
- 定义一个二位字符数组,按照规律填充内容,然后输出整个二维数组
例子:
思路:
注意点:
#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)——一些模拟题:简单模拟、查找元素、图形输出、日期处理、进制转换、字符串处理的更多相关文章
- HDU4814——数学,模拟进制转换
本题围绕:数学公式模拟进制转换 HDU4814 Golden Radio Base 题目描述 将一个十进制的非负整数转换成E(黄金分割数)进制的数 输入 不大于10^9的非负整数,处理到文件尾 输出 ...
- Java基础笔记(3) 进制与进制转换
---恢复内容开始--- 进制 在一般生活中,我们一直在应用的十进制,就是逢十进一,而今天我们要接触的是,计算机编程常用的进制!首先我们要知道,计算机内部运算采用的是二进制,也就是逢二进制! 1.什么 ...
- 进制转换(NOIP2000&NOIP水题测试(2017082301))
题目链接:进制转换 这题得明白其中的数学方法,明白后就不难了. 那么我们应该怎么计算呢? 其实也很简单. 我们依然采取辗转相除法. 但是,对于负的余数,我们需要进行一些处理. 我们怎么处理呢? 很简单 ...
- PAT甲级 进制转换题_C++题解
进制转换题 PAT (Advanced Level) Practice 进制转换题 目录 <算法笔记> 重点摘要 1015 Reversible Primes (20) 1019 Gene ...
- poj1220:高精度进制转换模板题
今天撸3708 一直奇怪的re 就先放下了,写这个题的过程中学习了一个高精度进制转换,用这个模板写了1220 记录一下: #include <iostream> #include < ...
- ZOJ 3542 2011大连现场赛D题(简单模拟)
Hexadecimal View Time Limit: 2 Seconds Memory Limit: 65536 KB Hexadecimal is very important an ...
- hdu4814 模拟(黄金分割进制转换)
题意: 给你一个十进制数,让你把他转化成Q进制数,Q是黄金分割比 = (1+√5)/2. 思路: 首先要明确的就是虽然q是实数,但是依然可以转换成q进制数,因为任何数num, ...
- 用C#简单实现的36进制转换代码
private const string initValue = "A0000001"; private static string cs = "0123456789AB ...
- HDU 4432 Sum of divisors (水题,进制转换)
题意:给定 n,m,把 n 的所有因数转 m 进制,再把各都平方,求和. 析:按它的要求做就好,注意的是,是因数,不可能有重复的...比如4的因数只有一个2,还有就是输出10进制以上的,要用AB.. ...
随机推荐
- 下载bat脚本
@rem 注释:从ftp服务器每小时下载北向性能文件的脚本 @rem 用vb脚本取昨天 for /f %%a in ('cscript //nologo yester.vbs') do set yes ...
- SpringMVC入门示例
1.新建一个Java Web项目 2.导入jar包 3.在WEB-INF下面建一个hello.jsp页面. 1 <%@ page language="java" import ...
- thinkPHP模型定义
批量新增 ArrayAccess类的属性当做数组访问 插入语句 这段代码说明,User继承的Model类的isupdate属性默认是isupdate,而User::get(1)把这一字段属性更新为tr ...
- CodeForces-721C-Journey(DAG, DP)
链接: https://vjudge.net/problem/CodeForces-721C 题意: Recently Irina arrived to one of the most famous ...
- C++为什么不可以把一个数组直接赋值给另一个数组
今天好奇一个问题, int a[3] = {1,2,3]; int b[3]; b=a; 编译器报错, 网上找了一圈, 大概明白: C++就是如此设定的, 数组不能直接赋值, 可以使用std::cop ...
- 【NOIP2016提高A组集训第1场10.29】配对游戏
题目 流行的跳棋游戏是在一个有mn个方格的长方形棋盘上玩的.棋盘起初全部被动物或障碍物占满了.在一个方格中,'X'表示一个障碍物,一个'0'-'9'的个位数字表示一个不同种类的动物,相同的个位数字表示 ...
- excel解决日常问题记录
=MOD(ROW(),2)和=TEXT(B2487-B2486,"[h]:mm:ss"),我利用excel分析出了延迟的数据 比较2个字符串是否一样:=EXACT(A2,F2) 公 ...
- Mybatis-Plus和Mybatis的区别
1.List item 区别一如果Mybatis Plus是扳手,那Mybatis Generator就是生产扳手的工厂.通俗来讲——MyBatis:一种操作数据库的框架,提供一种Mapper类,支持 ...
- C#之扩展方法 default(T)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- python – 如何禁用Django的CSRF验证?
如果只需要一些视图不使用CSRF,可以使用@csrf_exempt: from django.views.decorators.csrf import csrf_exempt @csrf_exempt ...