w5 排序

w5 排序7 1 统计工龄 分数 25 全屏浏览题目 切换布局 作者 陈越 单位 浙江大学 给定公司 N 名员工的工龄 要求按工龄增序输出每个工龄段有多少员工 输入格式 输入首先给出正整数 N 105 即员工总人数 随后给出 N 个整数 即每个员工的工龄

大家好,我是讯享网,很高兴认识大家。

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 制作了徽章的小型纪念版,要制成盲盒给大家玩了!

下图是一条盲盒包装流水线的示意图。首先徽章通过进货口被压入货栈里,空盒在履带上从左向右传送。每次从货栈里弹出一枚徽章,进入打包机,装入一只空盒,打包后继续向右边传送。当货栈为空时,打包机会暂停,等待下一批徽章压入货栈。

711aa88de1ac89f6fcadaff05585270e.png

每只盒子都有一个编号,小拼姐姐手里有进入流水线的空盒编号顺序表,也有每一批送往货栈的徽章顺序表,这样她其实可以知道每只盒子里装了哪种徽章。有些小朋友收到了盲盒,就想在拆封前问无所不知的小拼姐姐,盒子里的徽章是哪一种。但是因为盲盒总量有 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; }

 

 

小讯
上一篇 2025-03-26 07:49
下一篇 2025-03-14 16:55

相关推荐

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