报名第九次CCF认证,是为了能参加第二届的CCSP,做了一下题库里的C\C++模拟,发现真是够水了……

前三题,过于简单,不再赘述,发一下题目和对应答案~~~

出现次数最多的数

#include <iostream>
#include <algorithm>
#include <cstdio>using namespace std;const int MAXN = 1010;int S[MAXN];int main(int argc, const char * argv[])
{int n;cin >> n;for (int i = 0; i < n; i++){scanf("%d", S + i);}sort(S, S + n);int res = S[0], times = 1, res_ = S[0], times_ = 1;for (int i = 1; i < n; i++){if (S[i] == S[i - 1]){times_++;}else{res_ = S[i];times_ = 1;}if (times_ > times){res = res_;times = times_;}}cout << res << '\n';return 0;
}

ISBN号码

#include <iostream>
#include <cstdio>using namespace std;const int MAXN = 10;
const int MOD = 11;int ISBN[MAXN];
char X;int main(int argc, const char * argv[])
{scanf("%1d-%1d%1d%1d-%1d%1d%1d%1d%1d-%c",ISBN + 0, ISBN + 1, ISBN + 2, ISBN + 3, ISBN + 4, ISBN + 5,ISBN + 6, ISBN + 7, ISBN + 8, &X);int sum = 0;for (int i = 0; i < 9; i++){sum += ISBN[i] * (i + 1);}sum %= MOD;int num = X == 'X' ? 10 : X - '0';if (num == sum){cout << "Right\n";}else{cout << ISBN[0] << '-';cout << ISBN[1] << ISBN[2] << ISBN[3] << '-';cout << ISBN[4] << ISBN[5] << ISBN[6] << ISBN[7] << ISBN[8] << '-';if (sum == 10){cout << "X\n";}else{cout << sum << '\n';}}return 0;
}

最大的矩阵

#include <iostream>
#include <cstdio>using namespace std;const int MAXN = 1010;int h[MAXN];int main(int argc, const char * argv[])
{int n;cin >> n;for (int i = 0; i < n; i++){scanf("%d", h + i);}int res = 0;for (int i = 0; i < n; i++){int j, k;for (j = i - 1; j >= 0; j--){if (h[j] < h[i]){j++;break;}}if (j == -1){j++;}for (k = i + 1; k < n; k++){if (h[k] < h[i]){k--;break;}}if (k == n){k--;}int temp = (k - j + 1) * h[i];if (temp > res){res = temp;}}cout << res << '\n';return 0;
}

有趣的数

遇见这种问题,不用多想,百分之八九十就是dp,观察数位之间的关系,寻找状态转移方程,具体的状态转移方程看代码~~~不难理解。

#include <iostream>using namespace std;typedef long long ll;const int MAXN = 1010;
const ll MOD = 1e9 + 7;
const int MAXM = 6;ll dp[MAXN][MAXM];int main()
{int n;cin >> n;for (int i = 0; i < MAXM; i++){dp[0][i]=0;}/*6种状态* 0--剩013* 1--剩13* 2--剩01* 3--剩3* 4--剩1* 5--无*/for (int i = 1; i <= n; i++){int temp = i - 1;dp[i][0] = 1;dp[i][1] = (dp[temp][0] + dp[temp][1] * 2) % MOD;dp[i][2] = (dp[temp][0] + dp[temp][2]) % MOD;dp[i][3] = (dp[temp][1] + dp[temp][3] * 2) % MOD;dp[i][4] = (dp[temp][1] + dp[temp][2] + dp[temp][4] * 2) % MOD;dp[i][5] = (dp[temp][3] + dp[temp][4] + dp[temp][5] * 2) % MOD;}cout << dp[n][5] << endl;return 0;
}

I’m stuck!

这道题是常规的搜索题,思路就是dfs或者bfs,并且需要满足两个条件,而这两个条件我们可以分别先满足,然后把同时满足的计数,一般做法是先正向dfs一遍,然后把所有S能达到的方格再dfs一遍,但是这样的话时间代价太高,不知道会不会超时,比较快捷的解法就是先正向,然后反向,正向十分简单,反向比较难想一些,考到逆向思维,你需要判断是否可以原路折返回去,而这里就需要判断上一步的格子和这一步的格子之间的连通性,代码写起来比较费劲儿,需要考虑很多种情况,具体的还是看代码吧~~~

#include <iostream>
#include <cstring>using namespace std;const int MAXR = 55;
const int MAXC = MAXR;
const int dir[4][2] = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};int R, C;
char map[MAXR][MAXC];
int visS[MAXR][MAXC];
int visT[MAXR][MAXC];
bool flag;void dfsS(int x, int y)
{visS[x][y] = 1;switch (map[x][y]){case '+':for (int i = 0; i < 4; i++){if (x + dir[i][0] >= 0 && x + dir[i][0] < R &&y + dir[i][1] >= 0 && y + dir[i][1] < C &&map[x + dir[i][0]][y + dir[i][1]] != '#' &&visS[x + dir[i][0]][y + dir[i][1]] == 0){dfsS(x + dir[i][0], y + dir[i][1]);}}break;case '-':for (int i = 2; i < 4; i++){if (x + dir[i][0] >= 0 && x + dir[i][0] < R &&y + dir[i][1] >= 0 && y + dir[i][1] < C &&map[x + dir[i][0]][y + dir[i][1]] != '#' &&visS[x + dir[i][0]][y + dir[i][1]] == 0){dfsS(x + dir[i][0], y + dir[i][1]);}}break;case '|':for (int i = 0; i < 2; i++){if (x + dir[i][0] >= 0 && x + dir[i][0] < R &&y + dir[i][1] >= 0 && y + dir[i][1] < C &&map[x + dir[i][0]][y + dir[i][1]] != '#' &&visS[x + dir[i][0]][y + dir[i][1]] == 0){dfsS(x + dir[i][0], y + dir[i][1]);}}break;case '.':if (x + 1 < R && map[x + 1][y] != '#' && visS[x + 1][y] == 0){dfsS(x + 1, y);}break;}
}void dfsT(int x, int y, int preX, int preY)
{if (visT[x][y] || map[x][y] == '#'){return ;}if (map[x][y] == '.' && preX == x + 1 && preY == y){visT[x][y] = 1;}else if (map[x][y] == '-' && preX == x){visT[x][y] = 1;}else if (map[x][y] == '|' && preY == y){visT[x][y] = 1;}else if (map[x][y] == '+'){visT[x][y] = 1;}if (visT[x][y] == 0){return ;}if (x - 1 >= 0){dfsT(x - 1, y, x, y);}if (x + 1 < R){dfsT(x + 1, y, x, y);}if (y - 1 >= 0){dfsT(x, y - 1, x, y);}if (y + 1 < C){dfsT(x, y + 1, x, y);}
}int main(int argc, const char * argv[])
{memset(visS, 0, sizeof(visS));memset(visT, 0, sizeof(visT));cin >> R >> C;int xS = 0, xT = 0, yS = 0, yT = 0;for (int i = 0; i < R; i++){scanf("%s", map[i]);for (int j = 0; j < C; j++){if (map[i][j] == 'S'){xS = i;yS = j;map[i][j] = '+';}else if (map[i][j] == 'T'){xT = i;yT = j;map[i][j] = '+';}}}dfsS(xS, yS);if (visS[xT][yT] == 0){cout << "I'm stuck!\n";return 0;}dfsT(xT, yT, xT, yT);int counts = 0;for (int i = 0; i < R; i++){for (int j = 0; j < C; j++){if (map[i][j] != 'S' && map[i][j] != 'T' &&visS[i][j]  && !visT[i][j]){counts++;}}}std::cout << counts << '\n';return 0;
}

前三题就是秀智商的问题,不算笨的人30分钟内就能搞定前三题,拿到300分,第四题、第五题需要略微思考些,就算拿不全分,也不至于0分~~~

CCF模拟题-1~5相关推荐

  1. I'm stuck! ccf模拟题。

    ccf模拟题. I'm stuck! 时间限制: 1.0s 内存限制: 256.0MB 问题描述 给定一个R行C列的地图,地图的每一个方格可能是'#', '+', '-', '|', '.', 'S' ...

  2. CCF模拟题——有趣的数详解

    马上就要参加CCF认证考试了,然后最近就在做CCF上的模拟题,我选的语言是java,然后遇到第四题--有趣的数,当时一看题目,卧槽太TM简单了,比第一题和第二题还简单,高兴死我了,然后我就做呗,然后我 ...

  3. CCF 模拟题 有趣的数 (数位DP)

    问题描述 我们把一个数称为有趣的,当且仅当: 1. 它的数字只包含0, 1, 2, 3,且这四个数字都出现过至少一次. 2. 所有的0都出现在所有的1之前,而所有的2都出现在所有的3之前. 3. 最高 ...

  4. CCF 模拟题,公共钥匙盒

    题目描述: 有一个学校的老师共用N个教室,按照规定,所有的钥匙都必须放在公共钥匙盒里,老师不能带钥匙回家.每次老师上课前,都从公共钥匙盒里找到自己上课的教室的钥匙去开门,上完课后,再将钥匙放回到钥匙盒 ...

  5. CCF CSP 201609-2 火车购票(C++语言100分)[简单模拟题]

    1. 问题链接:CCF 201609-2 火车购票 试题编号: 201609-2 试题名称: 火车购票 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 请实现一个铁路购票系统的 ...

  6. 重庆社区计算机考试题库,2020重庆社区工作者考试题库:模拟题100题(64)

    2020年重庆社区工作者考试正在如火如荼的开展,为了帮助大家做好备考工作,社区工作者考试模拟题,希望考生们能与小编共同坚持--每日一练! 2020年社区工作者考试模拟题100题64 1. 在市场经济条 ...

  7. 计算机一级考试模拟题函数,2015年计算机一级考试模拟题(四)

    2015年计算机一级考试模拟题(四) 请用Word 2003对考生文件夹下WORD.DOC文档中的文字进行编辑.排版和保存,具体要求如下: (1)将标题段("十年后的家电")文字设 ...

  8. java格林认证_Java考试格林模拟题

    Java考试格林模拟题 question 14) which of the following lines of code will compile without error 1) int i=0; ...

  9. 计算机应用a级考试,四川省职称计算机应用能力考试A级模拟题

    内容简介: 四川省职称计算机应用能力考试A级模拟题 一.单选题: 1.软件工程管理是指对(C)一切活动的管理. A.软件计划期 B.高级决策层 C.软件生命期 D.软件计划和开发期 2.从一个长度为n ...

最新文章

  1. conda 命令和创建tensorflow环境
  2. 【敏捷测试】一个测试人员在参与敏捷测试的经验分享(3)
  3. phpwind 8.7 发布主题 分析
  4. c语言位运算 求1个整数的二进制数有多少个1
  5. [JZOJ P1311] [DP]邮局设置问题
  6. arduino 土壤温湿度传感器_智慧农业温室大棚环境监测传感器
  7. AngularJS 学习
  8. 产品经理应该mysql_数据库对产品经理的重要性
  9. 60-008-000-使用-命令
  10. Excel将多个工作簿加载到SQL Server中
  11. linux 内网共享文件夹_linux局域网文件共享服务器
  12. java后端使用freemarker生成echarts图表word
  13. 华为存储系统操作管理
  14. 11个非常炫酷的网页样式特效【附实现代码】
  15. 【xla】七、【构图阶段】其他pass
  16. 总结:linux笔记-001
  17. 大力普及“他妈的”有助于语言交流
  18. 点击化学(Click chemistry) 叠氮-PEG4-NHS/Biotin-PEG-N3/Azid/DBCO-EPG-NHS/DBCO-NH2
  19. 用NDK-r25编译libpng
  20. CSS3回炉计划-编码技巧

热门文章

  1. H5拍照、选择图片上传组件核心
  2. Buy and Resell
  3. python核心编程电子书_Python核心编程 PDF 超清第3版
  4. 地图名片:百度地图 高德地图 pc 移动端快速实现地图生成、标记以及标注获取链接及代码(霸霸看了都说好)
  5. 剑指offer算法题028:数组中出现次数超过一半的数字
  6. UIPATH 结合 Python 识别 PDF 中的表格
  7. 一节双曲型方程基于MATLAB的求解,二维双曲型方程的分组并行格式及其数值实验...
  8. 微信小程序开发基础知识2(黑马)
  9. 如何在柿饼派中用mqtt接收数据并进行解析
  10. 我用 python 做了款可开淘宝店赚钱的工具