企业中英文网站开发,做网络推广可以通过哪些渠道推广,朝阳周边网站建设,苏州seo排名优化课程个位数统计
题目描述#xff1a;
定一个 k 位整数 Ndk−110k−1⋯d1101d0 (0≤di≤9, i0,⋯,k−1, dk−10)#xff0c;请编写程序统计每种不同的个位数字出现的次数。例如#xff1a;给定 N100311#xff0c;则有 2 个 0#xff0c;3 个 1#xff0c;和 …个位数统计
题目描述
定一个 k 位整数 Ndk−110k−1⋯d1101d0 (0≤di≤9, i0,⋯,k−1, dk−10)请编写程序统计每种不同的个位数字出现的次数。例如给定 N100311则有 2 个 03 个 1和 1 个 3。
输入格式
每个输入包含 1 个测试用例即一个不超过 1000 位的正整数 N。
输出格式
对 N 中每一种不同的个位数字以 D:M 的格式在一行中输出该位数字 D 及其在 N 中出现的次数 M。要求按 D 的升序输出。
输入样例
100311输出样例
0:2
1:3
3:1
解题思路
·很多同学看到这题的第一反应可能是遍历每一位数字并且将其保存再统计出现的次数最后输出这样确实是可以写出来但是却费事费力
·可以将输入的数字看作是字符串输入再使用map将其排序并且可以统计其字符种类以及个数这道题所求的结果也与map的结果不谋而合
代码如下
#include iostream
#include map
#include stringusing namespace std;int main() {string n; cin n;mapchar, int digitcount;//用于记录每个数字字符出现的次数for (char digit : n) {//遍历输入字符串中N的个数if (isdigit(digit)) {//判断是否为数字字符digitcount[digit];//若为数字字符则digitCount中对应的数字加一}}for (auto it digitcount.begin(); it ! digitcount.end(); it) {//遍历map中的数值cout it-first : it-second endl;//输出每个数字字符和其出现的次数}return 0;
}
·时间复杂度O(n)
·空间复杂度O(n)取决于输出数组的种类
易错点
·需要使用map而不是unordered_map因为使用map会自动将数字排序而使用unordered_map则不会排序
总结
这道题并没有什么技术上的问题只需要明白map如何使用以及要想到使用map这一关键点 考试座位号
题目描述
每个 PAT 考生在参加考试时都会被分配两个座位号一个是试机座位一个是考试座位。正常情况下考生在入场时先得到试机座位号码入座进入试机状态后系统会显示该考生的考试座位号码考试时考生需要换到考试座位就座。但有些考生迟到了试机已经结束他们只能拿着领到的试机座位号码求助于你从后台查出他们的考试座位号码。
输入格式
输入第一行给出一个正整数 N≤1000随后 N 行每行给出一个考生的信息准考证号 试机座位号 考试座位号。其中准考证号由 16 位数字组成座位从 1 到 N 编号。输入保证每个人的准考证号都不同并且任何时候都不会把两个人分配到同一个座位上。
考生信息之后给出一个正整数 M≤N随后一行中给出 M 个待查询的试机座位号码以空格分隔。
输出格式
对应每个需要查询的试机座位号码在一行中输出对应考生的准考证号和考试座位号码中间用 1 个空格分隔。
输入样例
4
3310120150912233 2 4
3310120150912119 4 1
3310120150912126 1 3
3310120150912002 3 2
2
3 4输出样例
3310120150912002 2
3310120150912119 1
解题思路
·看到一长串题目不要被吓住要找到题目中的关键点每个考试的准考证号 试机座位号 考试座位号都是一一对应的。所以就可以使用结构体进行求解
代码如下
#include iostream
#include string
#include vector
using namespace std;struct student {string id;int test;int exam;
};int main() {int n; cin n;vectorstudent students(n);for (int i 0; i n; i) {cin students[i].id students[i].test students[i].exam;}int m, Test;cin m;for (int i 0; i m; i) {cin Test;for (int j 0; j n; j) {if (students[j].test Test) {cout students[j].id students[j].exam endl;break;}}}return 0;
}
·时间复杂度O(n*m)
·空间复杂度O(nm)
总结
本题主要考察对结构体的使用因为大部分同学对结构体的使用并不熟悉所以这道题是一个很好的锻炼使用结构体的题目 A-B
题目描述
本题要求你计算A−B。不过麻烦的是A和B都是字符串 —— 即从字符串A中把字符串B所包含的字符全删掉剩下的字符组成的就是字符串A−B。
输入格式
输入在2行中先后给出字符串A和B。两字符串的长度都不超过104并且保证每个字符串都是由可见的ASCII码和空白字符组成最后以换行符结束。
输出格式
在一行中打印出A−B的结果字符串。
输入样例
I love GPLT! Its a fun game!
aeiou输出样例
I lv GPLT! Its fn gm!
解题思路
·这题开始上难度了可能有同学想要遍历两个字符串然后将相同的字符串删除但是这样就太麻烦了而且会有很多细节的地方会出错所以我们并不选择这个解法
·我们可以使用unordered_set进行求解将字符串B输入unordered_set中再遍历字符串A将其中的字符一一输出如果不相等就输出再创建一个字符串result进行字符连接最终结果再将result输出
代码如下
#include iostream
#include unordered_set
#include stringusing namespace std;string substractString(const string A, const string B) {unordered_setchar setB;//定义setBfor (char b : B) {//遍历字符B将字符插入setB中setB.insert(b);}string result ;for (char a : A) {if (setB.find(a) setB.end())//如果A中的元素与B中的不相等则将其接入result中result a;}return result;
}
int main() {string A, B;getline(cin, A);getline(cin, B);string result substractString(A, B);cout result;
}
·时间复杂度O(mn)
·空间复杂度:O(m),m为B中的字符
难点
·set中各种操作的使用
·以及需要明白为什么使用unordered_set操作
总结
面对字符串的题目需要活用字符串中的各种函数以及工具这样可以快速且正确的进行解题 计算阶乘和
题目描述
对于给定的正整数N需要你计算 S1!2!3!...N!。
输入格式
输入在一行中给出一个不超过10的正整数N。
输出格式
在一行中输出S的值。
输入样例
3输出样例
9
解题思路 ·这是一道简单的数学题可以自己创建一个连乘的函数即可
代码如下
#include iostream
#include cmathusing namespace std;int multipe(int n) {int sum 1;for (int i 1; i n; i) {sum * i;}return sum;
}
int main() {int n; cin n;int ans 0;for (int i 1; i n; i) {ans multipe(i);}cout ans;
}
·时间复杂度O(n*n)
·空间复杂度O(n)
总结
这是一道简单的基础题大家需要搞明白应该如何计算即可