7-1 统计工龄
分数 25
全屏浏览题目
切换布局
作者 陈越
单位 浙江大学
给定公司N名员工的工龄,要求按工龄增序输出每个工龄段有多少员工。
输入格式:
输入首先给出正整数N(≤105),即员工总人数;随后给出N个整数,即每个员工的工龄,范围在[0, 50]。
输出格式:
按工龄的递增顺序输出每个工龄的员工个数,格式为:“工龄:人数”。每项占一行。如果人数为0则不输出该项。
输入样例:
8 10 2 0 5 7 2 5 2
讯享网
输出样例:
讯享网0:1 2:3 5:2 7:1 10:1
#include<bits/stdc++.h> #define N 51 using namespace std; int main() { int i,n,age; static int a[N]; cin>>n; for(i = 0;i < n;i++) { scanf("%d",&age); a[age]++; } for(i = 0;i < N;i++) { if(a[i] != 0) printf("%d:%d\n",i,a[i]); } return 0; }
7-2 字符串的冒泡排序
分数 25
全屏浏览题目
切换布局
作者 陈越
单位 浙江大学
我们已经知道了将N个整数按从小到大排序的冒泡排序法。本题要求将此方法用于字符串序列,并对任意给定的K(<N),输出扫描完第K遍后的中间结果序列。
输入格式:
输入在第1行中给出N和K(1≤K<N≤100),此后N行,每行包含一个长度不超过10的、仅由小写英文字母组成的非空字符串。
输出格式:
输出冒泡排序法扫描完第K遍后的中间结果序列,每行包含一个字符串。
输入样例:
讯享网6 2 best cat east a free day
输出样例:
best a cat day east free
讯享网#include<bits/stdc++.h> #define N 101 using namespace std; string s[N]; int main() { int n,k,i,bj = 0; cin>>n>>k; for(i = 0;i < n;i++) cin>>s[i]; for(i = 0;i < n;i++) { for(int j = 1;j < n-i;j++) { if(s[j-1] > s[j]) { string temp = s[j-1]; s[j-1] = s[j]; s[j] = temp; } } bj++; if(bj == k) break; } for(i = 0;i < n;i++) cout<<s[i]<<endl; return 0; }
7-3 插入排序还是归并排序
分数 25
全屏浏览题目
切换布局
作者 陈越
单位 浙江大学
根据维基百科的定义:
插入排序是迭代算法,逐一获得输入数据,逐步产生有序的输出序列。每步迭代中,算法从输入序列中取出一元素,将之插入有序序列中正确的位置。如此迭代直到全部元素有序。
归并排序进行如下迭代操作:首先将原始序列看成 N 个只包含 1 个元素的有序子序列,然后每次迭代归并两个相邻的有序子序列,直到最后只剩下 1 个有序的序列。
现给定原始序列和由某排序算法产生的中间序列,请你判断该算法究竟是哪种排序算法?
输入格式:
输入在第一行给出正整数 N (≤100);随后一行给出原始序列的 N 个整数;最后一行给出由某排序算法产生的中间序列。这里假设排序的目标序列是升序。数字间以空格分隔。
输出格式:
首先在第 1 行中输出Insertion Sort表示插入排序、或Merge Sort表示归并排序;然后在第 2 行中输出用该排序算法再迭代一轮的结果序列。题目保证每组测试的结果是唯一的。数字间以空格分隔,且行首尾不得有多余空格。
输入样例 1:
10 3 1 2 8 7 5 9 4 6 0 1 2 3 7 8 5 9 4 6 0
输出样例 1:
讯享网Insertion Sort 1 2 3 5 7 8 9 4 6 0
输入样例 2:
10 3 1 2 8 7 5 9 4 0 6 1 3 2 8 5 7 4 9 0 6
输出样例 2:
讯享网Merge Sort 1 2 3 8 4 5 7 9 0 6
#include<stdio.h> #include<stdbool.h> #include<math.h> #include<algorithm> using namespace std; int N,a[110],b[110],target[110],temparry[110];//元素个数,初始数组,中间数组,目标数组,运算数组 //输出函数 void output(int target[]) { for(int i=0; i<N; i++) { printf("%d",target[i]); if(i<N-1) { printf(" "); } } } //判断两数组是否相等 bool compare(int a[],int b[]) { for(int i=0; i<N; i++) { if(a[i]!=b[i]) { return false; } } return true; } //插入排序 bool InsertionSort(int temparry[]){ bool flag=false; for(int i=1;i<N;i++){ if (i!=1&&compare(temparry,b)){ flag=true; } int temp=temparry[i],j=i; while(j>0&&temparry[j-1]>temp){ temparry[j]=temparry[j-1]; j--; } temparry[j]=temp; if(flag==true){ return true; } } return false; } //归并排序 bool MergeSort(int a[]) { bool flag=false; for(int step=1; step/2<=N; step*=2) { flag=compare(a,b); if(flag)//若相等 { for(int i=0; i<N; i+=step) //再进行一次迭代 { sort(a+i,a+min(i+step,N)); } for(int i=0; i<N; i++)//将迭代结果赋给target数组 { target[i]=a[i]; } return true;//返回"真" break; } for(int i=0; i<N; i+=step) { sort(a+i,a+min(i+step,N)); } } } int main() { scanf("%d",&N); for(int i=0; i<N; i++) { scanf("%d",&a[i]); temparry[i]=a[i]; } for(int i=0; i<N; i++) { scanf("%d",&b[i]); } //判断是哪种排序方式 if( InsertionSort(temparry)) { printf("Insertion Sort\n"); output(temparry); } else { printf("Merge Sort\n"); for(int i=0; i<N; i++) //还原temparry数组!!!! { temparry[i]=a[i]; } MergeSort(temparry); output(target); } return 0; }
7-4 盲盒包装流水线
分数 25
全屏浏览题目
切换布局
作者 陈越
单位 浙江大学
众所周知,PAT 有 9 枚徽章,分别对应青铜、白银、黄金、白金、钻石、大师、王者、大圣、天神这 9 个段位,只有成绩非常优秀的考生才有资格获得刻有自己名字的徽章。现在,PAT 制作了徽章的小型纪念版,要制成盲盒给大家玩了!
下图是一条盲盒包装流水线的示意图。首先徽章通过进货口被压入货栈里,空盒在履带上从左向右传送。每次从货栈里弹出一枚徽章,进入打包机,装入一只空盒,打包后继续向右边传送。当货栈为空时,打包机会暂停,等待下一批徽章压入货栈。

每只盒子都有一个编号,小拼姐姐手里有进入流水线的空盒编号顺序表,也有每一批送往货栈的徽章顺序表,这样她其实可以知道每只盒子里装了哪种徽章。有些小朋友收到了盲盒,就想在拆封前问无所不知的小拼姐姐,盒子里的徽章是哪一种。但是因为盲盒总量有 105 这么多,小拼姐姐可记不住每只盒子里装的是什么,于是你就被请来写个程序帮小拼姐姐回复这种信息。
输入格式:
输入第一行给出 2 个正整数,分别为盲盒总量 N(≤105)和货栈容量 S(≤100)。接下来一行给出 N 只盒子的编号,编号由 5 位数字组成,给出的顺序是空盒进入传送带的顺序。随后 N/S(保证是整数)行,每行给出一批 S 枚徽章的类型,为 1-9 的数字,给出的顺序是从进货口入栈的顺序。
再下面给出一个正整数 K(≤104),为查询次数。随后 K 行,每行给出一个 5 位编号。
输出格式:
对每个查询编号,在一行中输出该盒子中装的徽章类型。如果编号是错误的,则在一行中输出 Wrong Number。
输入样例:
讯享网10 5 00132 10093 92001 23333 66666 88888 09009 34658 82750 69251 1 2 3 4 5 9 8 7 6 1 5 66666 88888 69251 55555 10093
输出样例:
1 1 9 Wrong Number 4
讯享网#include <iostream> #include <string> #include <map> using namespace std; const int MAXN = ; map<string, int> mp; string str[MAXN]; int main(void) { int n, s; cin >> n >> s; for ( int i = 0; i < n; i ++ ) cin >> str[i]; for ( int i = 1; i <= n / s; i ++ ) for ( int j = 1; j <= s; j ++ ) cin >> mp[str[i * s - j]]; int k; cin >> k; string num; while ( k -- ) { cin >> num; // count是STL库自带的函数,计算容器中值出现的次数 if ( mp.count(num) ) cout << mp[num] << endl; else cout << "Wrong Number\n"; } return 0; }

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/116513.html