问题解决策略基础算法实现训练1

张开发
2026/4/10 4:22:31 15 分钟阅读

分享文章

问题解决策略基础算法实现训练1
问题 A C 语言习题 字符串排序[ 提交] [ 状态]题目描述输入nnn个字符串将它们按字母由小到大的顺序排列并输出。编写三个函数实现 用于输出inputnnn个字符串 用于排序sortstrnnn个字符串 用于输出outputnnn个字符串输入第一行nnn第二行到第n1n1n1行每行一个字符串输出排序后的字符串输入输出样例样例输入 #1复制3 YTU ACM COM样例输出 #1复制ACM COM YTU提示主函数已给定如下提交时不需要包含下述主函数C:int main() { char str[10][10]; int n; scanf(%d, n); input(str, n); sortstr(str, n); output(str, n); return 0; }Cint main() { string str[10]; int n; cin n; input(str, n); sortstr(str, n); output(str, n); return 0; }#includeiostream #includestring #includevector #includealgorithm using namespace std; bool cmp(string a, string b) { return a b; } void input(string str[], int n) { for (int i 0;i n;i) cin str[i]; } void sortstr(string str[], int n) { sort(str, str n, cmp);//注意这里 } void output(string str[], int n) { for (int i 0;i n;i) cout str[i] endl; }问题 B C语言习题 不等长字符串排序题目描述在主函数中输入nnnn≤10n \le 10不≤10个不等长的字符串用另一函数对它们排序然后在主函数输出这nnn个已排好序的字符串。输入nnn和nnn个不等长字符串。输出nnn个已排好序的字符串。输入输出样例样例输入 #1复制5 abcd 12345678 abc 123456 ab123样例输出 #1复制123456 12345678 ab123 abc abcd提示主函数已给定如下提交时不需要包含下述主函数。C:int main() { void sort(char *[], int n); int i; char str[10][80]; char *p[10]; int n; scanf(%d, n); for (i 0; i n; i) scanf(%s, str[i]); for (i 0; in; i) p[i] str[i]; sort(p, n); for (i 0; i n; i) printf(%s\n, p[i]); return 0; }Cint main() { void sort(char *[], int n); int i; char str[10][80]; char *p[10]; int n; cin n; for (i 0; i n; i) cinstr[i]; for (i 0; i n; i) p[i] str[i]; sort(p, n); for (i 0; i n; i) cout p[i] endl; return 0; }套用cpp的string来写的#includeiostream #includealgorithm #includestring using namespace std; bool cmp(char* a, char* b) { string x; string y; int n sizeof(a) / sizeof(char); int m sizeof(b) / sizeof(char); for (int i 0;i n;i) x.push_back(a[i]); for (int i 0;i m;i) y.push_back(b[i]); return x y; } void sort(char* p[], int n) { sort(p, p n, cmp); }问题 C: 团体操排序题目描述注本题只需要提交填写部分的代码请按照C语言方式提交。mmm 个班级每班选 nnn 个人穿不同颜色的衣服所有衣服颜色都不同参加学校运动会大型团体操表演。每班站一行每个人在班级所在行中的位置是固定不变的班级所在行是可以改变的。任选一列同学要求按照该名同学衣服颜色的首字母 ASCII 升序对班级所在行进行排列。#include stdio.h #include stdlib.h #define M 3 /* 班级数 */ #define N 4 /* 每班人数 */ int main() { char color[M][N] { {R,G,B,C}, {B,Y,W,O}, {Y,R,P,W} } ; char *pcolor[M]; int i, j, k; char *temp; /* 初始化指针数组 */ for (i 0; i M; i) pcolor[i]color[i]; /* 输入 */ for (i 0; i M; i) { for (j 0; j N; j) scanf(%c, color[i]j); scanf(%*c); } scanf(%d, k); /* 冒泡排序 */ for (i 0; i M-1; i) for(j0; jM-i-1; j) /* 在此之间完善代码 */ ...... /* 在此之间完善代码 */ for (i 0; i M; i) { /* 按新序输出各班的颜色 */ for(j0; jN; j) printf(%c, *(pcolor[i]j)); printf(\n); } for (i 0; i M; i) { /* 按原序输出各班的颜色 */ for (j 0; j N; j) printf(%c, color[i][j]); printf(\n); } return 0; }输入输入 333 行 444 列的色彩方案字符数组。每个字符表示一种颜色输入一个数字 kkk 代表所选列数1≤k≤n1 \le k \le n1≤k≤n。输出输出排列后的色彩方案和原来的色彩方案输入输出样例样例输入 #1复制RGBC BYWO YRPW 2样例输出 #1复制RGBC YRPW BYWO RGBC BYWO YRPW记得k-1即可{ if (pcolor[j][k - 1] pcolor[j 1][k - 1]) { char* tmp pcolor[j]; pcolor[j] pcolor[j 1]; pcolor[j 1] tmp; } }问题 D: 学生信息排序题目描述定义存放一个学生信息的结构体类型学生信息包括姓名学号性别院系要求在随意输入 555 个学生的相关信息后按照学号从小到大顺序输出这些学生的信息。输入先输入 555 名学生的信息按学号顺序排序输出后在输入要统计的院系名称。输出先按学号从小到大的顺序输出学生信息。输入输出样例样例输入 #1复制zhang3 20149003 M 信息系 zhang5 20149005 F 信息系 zhang10 20149010 F 管理系 zhang1 20149001 M 会计系 zhang9 20149009 M 会计系样例输出 #1复制zhang1 20149001 M 会计系 zhang3 20149003 M 信息系 zhang5 20149005 F 信息系 zhang9 20149009 M 会计系 zhang10 20149010 F 管理系提示数据输出之间有 444 个空格。没想到带中文的院系居然可以直接用string表示这题一把过太爽了//姓名学号性别院系 #includeiostream #includestring #includevector #includealgorithm using namespace std; struct student { string name; string number; string sex; string major; }; bool cmp(struct student a, struct student b) { return a.number b.number; } int main() { int n 5; vectorstruct studentstu(n); for (int i 0;i n;i) cin stu[i].name stu[i].number stu[i].sex stu[i].major; sort(stu.begin(), stu.end(), cmp); for (int i 0;i n;i) { cout stu[i].name ; cout stu[i].number ; cout stu[i].sex ; cout stu[i].major endl; } return 0; }

更多文章