不一定对 根据记忆回忆 你有1、5、10、50、100面值的人民币分别a、b、c、d、e张,输入k元,输出最少要掏几张人民币。如果不能凑够输出-1. 题干给出了经过每轮排序后数据的分布,要求写出相应的程序,我猜是快速排序,现场没做出来。 输出: 输出两个矩形各自对角线上的两个点,比如A矩形(0,0),(1,1)B矩形(2,2),(3,3)。则A矩形另外两个点为(0,1),(1,0),B矩形另外两个点为(2,3),(3,2).判断两个矩形是否相交。 输入一行字符串,输出字符串中的数字。 实现一个加法计数器,要求满足是任意大小的两个整数相加 将任意长度的字符串按下列规则压缩并输出 华老师的n个学生参加了一次模拟测验,考出来的分数很糟糕,但是华老师可以将成绩修改为[0,100]中的任意值,所以他想知道,如果要使所有人的成绩的平均分不少于X分,至少要改动多少个人的分数? 输入 输出 有n个杀手排成一行,每个杀手都有一个不同的编号(编号为1-n),在每个夜晚,杀手都会行动,如果某个杀手编号大于他右边的杀手的编号,他就会杀死他右边的杀手,杀手是的行动是瞬间的,因此一个人可能某一个夜晚既杀死了别人又被别人杀死,例如3,2,1这个顺序,在第一个夜晚2会杀死1,同时3也会杀死2。显而易见,一段时间之后,就不会有人杀或被杀,平安夜也就到来了,请问在平安夜之前有多少个夜晚。 输入 输出 样例输入 补充样例 样例解释: 样例1中杀手的变化为[10 9 7 8 6 5 3 4 2 1]->[10 8 4]->[10],故答案为2。文章目录
一、科大讯飞2021校招提前批笔试题及答案
第一题:AC
第二题:0%
第三题:虽然AC,但后来发现还是错了
第四题:71%第一题 买东西
输入示例:55
输出示例:2//思路:100-1元,一个一个试探,能花哪个花哪个 //缺点:要求题目的面额成倍数增加,这样就不需要回溯 //假如面额是3,2,k是4,各种面额数量都是2,就算不出来 #include <iostream> #include <vector> using namespace std; int main() { int a, b, c, d, e, k; cin >> a >> b >> c >> d >> e; cin >> k; int ret=0; while (k > 0) { if (e > 0 && k - 100 >= 0) { e--; k -= 100; ret++; } else if (d > 0 && k - 50 >= 0) { d--; k -= 50; ret++; } else if (c > 0 && k - 10 >= 0) { c--; k -= 10; ret++; } else if (b > 0 && k - 5 >= 0) { b--; k -= 5; ret++; } else if (a > 0 && k - 1 >= 0) { a--; k -= 1; ret++; } else { break; } } if (k == 0) { cout << ret; } else { cout << -1; } return 0; }
第二题 排序
第一行输入数据个数,第二行输入数据。输出经过每轮排序后数据的情况。
输入示例:
输出示例://这是之后写的,可能是这样,我也不知道对不对 #include <iostream> #include <vector> using namespace std; void display(vector<int> &array) { for (auto i : array) { cout << i << " "; } cout << endl; } int getStandard(vector<int> &array, int i, int j) { int key = array[i];//基准数据 while (i < j) { while (i < j&&array[j] >= key) { j--; } if (i < j) { array[i] = array[j]; } while (i < j&&array[i] <= key) { i++; } if (i < j) { array[j] = array[i]; } } // 跳出循环时 i 和 j 相等, 此时的 i 或 j 就是 key 的正确索引位置 //把基准数据赋给正确位置 array[i] = key; display(array); return i; } void quicksort(vector<int>&array, int begin, int end) { if (begin<end) { int standard = getStandard(array, begin, end); quicksort(array, begin, standard-1); quicksort(array, standard+1, end); } } int main() { int n; vector<int> array{ 49,38,65,97,76,13,27,49,10 }; n = array.size(); /*int in; cin >> n; for (int i = 0;i < n;i++) { cin >> in; array.push_back(in); }*/ quicksort(array, 0, n - 1); display(array); return 0; }
10 38 27 13 49 76 97 49 65
10 38 27 13 49 76 97 49 65
10 13 27 38 49 76 97 49 65
10 13 27 38 49 76 97 49 65
10 13 27 38 49 65 49 76 97
10 13 27 38 49 49 65 76 97
10 13 27 38 49 49 65 76 97第三题 矩形相交
输入示例:0 0 1 1 2 2 3 3
输出示例:0//思路:判断一个矩形的点是否在另一个矩形。 //虽然AC了,但还是错的 //如果是0,0,3,3,1,-1,2,4。这种情况没有点在矩形内,但也是相交的 #include <iostream> using namespace std; bool between(int x, int y, int*A) { //判断(x,y)是否在矩形A中 if (x >= A[0] && x <= A[2] || x >= A[2] && x <= A[0]) { if (y >= A[1] && y <= A[3] || y >= A[3] && y <= A[1]) { return true; } } return false; } bool check(int *A, int *B) { //判断A的四个点是否至少有一个在矩形B中 if (between(A[0], A[1], B)) { return true; } if (between(A[0], A[3], B)) { return true; } if (between(A[2], A[1], B)) { return true; } if (between(A[2], A[3], B)) { return true; } return false; } int main() { int A[4]; int B[4]; for (int i = 0;i < 4;i++) { cin >> A[i]; } for (int i = 0;i < 4;i++) { cin >> B[i]; } if (check(A, B) || check(B, A)) { cout << 1; } else { cout << 0; } return 0; }
第四题 读取字符串中的数字
我写的有问题,不知道为啥只过了70%的测试用例。
推测1:可能是因为我这不停的输入,不能结束吧,因为他的要求是只读取一行。当时想用getline()函数可是怎么也想不起来另外一个参数是啥,唉,凉凉。
推测2:可能是要考虑正负数。
输入示例:#+0a19
输出示例:019//错误示例:只过了71%测试用例 #include <iostream> #include <string> using namespace std; int main() { string s; //cin >> s; while (cin >> s) { for (int i = 0;i < s.length();i++) { if (s[i] <= '9'&&s[i] >= '0') { int x = s[i] - '0'; cout << x; } } } cout << endl; return 0; }
//推测一对应的修改,也可能不对 #include <iostream> #include <string> using namespace std; int main() { string s; getline(cin, s);//读取一行 for (int i = 0;i < s.length();i++) { if (s[i] <= '9'&&s[i] >= '0') { int x = s[i] - '0'; cout << x; } } cout << endl; return 0; }
二、科大讯飞2020校招笔试题及答案
第一题:加法计数器
输入描述:任意大小的两个整数
输出描述:相加的结果
输入示例:123456789987654321 987654321123456789
输出示例:1111111111111111110#include <iostream> #include <string> #include <vector> using namespace std; int main() { string a, b; cin >> a >> b; int len = a.length() > b.length() ? a.length() : b.length() + 1; vector<int> c(len);//尽量使用vector,用数组创建数组是长度要设置常量 //这样也可以:但是在vs执行有问题 //int *c = new int(a.length()>b.length()?a.length():b.length() + 1); int carrybit = 0;//进位 int i = a.size() - 1, j = b.size() - 1, k = 0; int ai = 0, bj = 0; while (1) { if (i < 0 && j < 0) { break; } ai = 0, bj = 0; if (i >= 0) { ai = (a[i] - '0'); } if (j >= 0) { bj = (b[j] - '0'); } c[k] = (ai + bj + carrybit) % 10; carrybit = (ai + bj + carrybit) / 10; i--;j--;k++; } if (carrybit == 0) { k--; } else { c[k] = carrybit; } for (int i = k;i >= 0;i--) { cout << c[i]; } cout << endl; return 0; }
第二题:压缩字符串
规则:相同连续的字
符,则压缩为“数字个数 + 字符”,如aaabb输出3a2b
输入示例:aabb
输出示例:2a2b
备注:单个不压缩,如abcdba,输入不包含数字和转义字符#include <iostream> #include <string> #include <vector> using namespace std; int main() { string s; vector<char> output(s.length()); cin >> s; for (int i = s.length() - 1;i >= 0;i--) { output.push_back(s[i]); if (i - 1 >= 0 && s[i] == s[i - 1]) { output.push_back('1'); while (i - 1 >= 0 && s[i] == s[i - 1]) { output.back()++; i--; } } } for (int i = output.size() - 1;i >= 0;i--) { cout << output[i]; } }
三、科大讯飞2019秋招笔试题
第一题:改成绩
第一行一个数T,共T组数据(T≤10)
接下来对于每组数据:
第一行两个整数n和X。(1≤n≤1000, 0≤X≤100)
第二行n个整数,第i个数Ai表示第i个学生的成绩。(0≤Ai≤100)
共T行,每行一个整数,代表最少的人数。
样例输入
2
5 60
59 20 30 90 100
5 60
59 20 10 10 100
样例输出
1 2#include <iostream> #include <algorithm> #include <vector> using namespace std; int main() { int T; cin >> T; while (T--) { int n, X; cin >> n >> X; vector<int> grade; int g,sum=0; //输入+求和 for (int i = 0,in;i < n;i++) { cin >> g; sum += g; grade.push_back(g); } //排序 sort(grade.begin(), grade.end(), less<int>()); //从小到大修改成绩 int differ = X * n - sum; int i = 0; while (differ > 0) { differ = differ - (100 - grade[0]); i++; } cout << i << " "; } }
第二题:杀手
输入第一行是一个整数n(1≤n≤100000),表示杀手的数量。
接下来一行有n个数,是一个1-n的全排列。
输出包含一个整数,表示平安夜之前经历了多少个夜晚。
10
10 9 7 8 6 5 3 4 2 1
样例输出
2
输入样例2:
6
1 2 3 4 5 6
输出样例2 :
0#include <iostream> #include <vector> using namespace std; int main() { int n; cin >> n; int night = 0; vector<int> killers; int in; for (int i = 0;i < n;i++) { cin >> in; killers.push_back(in); } bool tag = true; while (tag) { tag = false; //i指向被杀人,判断当前i是否要被杀 //j指向新一轮杀手的结尾 int j = 1; for (int i = 1;i < n;i++) { if (killers[i] > killers[i - 1]) { killers[j] = killers[i]; j++; } else { tag = true; } } n = j; if(tag==true) night++; } cout << night << endl; return 0; }
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算