php做网站框架,wordpress 媒体分类,做网站端口内容无法替换,2022年度最火关键词■ 题目描述
【磁盘容量排序】
磁盘的容量单位常用的有M#xff0c;G#xff0c;T这三个等级#xff0c;它们之间的换算关系为1T 1024G#xff0c;1G 1024M#xff0c;现在给定n块磁盘的容量#xff0c;
请对它们按从小到大的顺序进行稳定排序#xff0c;例如给定5…■ 题目描述
【磁盘容量排序】
磁盘的容量单位常用的有MGT这三个等级它们之间的换算关系为1T 1024G1G 1024M现在给定n块磁盘的容量
请对它们按从小到大的顺序进行稳定排序例如给定5块盘的容量1T20M3G10G6T3M12G9M排序后的结果为20M3G3M12G9M1T10G6T。
注意单位可以重复出现上述3M12G9M表示的容量即为3M12G9M和12M12G相等。
输入描述
输入第一行包含一个整数n(2 n 100)表示磁盘的个数接下的n行每行一个字符串(长度大于2小于30)表示磁盘的容量
由一个或多个格式为mv的子串组成其中m表示容量大小v表示容量单位例如20M1T30G10G6T3M12G9M。
磁盘容量m的范围为1到1024的正整数容量单位v的范围只包含题目中提到的MGT三种换算关系如题目描述。
输出描述
输出n行表示n块磁盘容量排序后的结果。
C语言
#include bits/stdc.h#define CEILING_POS(X) ((X-(int)(X)) 0 ? (int)(X1) : (int)(X))
#define CEILING_NEG(X) ((X-(int)(X)) 0 ? (int)(X-1) : (int)(X))
#define CEILING(X) ( ((X) 0) ? CEILING_POS(X) : CEILING_NEG(X) )#define MIN(a, b) ((a) (b)) ? (a) : (b)
#define MAX(a, b) ((a) (b)) ? (a) : (b)int cmpfunc(const void *a, const void *b) {return (*(int *) a - *(int *) b);
}int convert(char *capacity) {int size 0;char *upper strdup(capacity);for (int i 0; i strlen(upper); i) {upper[i] toupper(upper[i]);}char *token strtok(upper, MGTP);while (token ! NULL) {int num atoi(token);char unit upper[strlen(token)];switch (unit) {case M:size num;break;case G:size num * 1024;break;case T:size num * 1024 * 1024;break;default:break;}token strtok(NULL, MGTP);}return size;
}int main() {int n;scanf(%d, n);char **capacities (char **) malloc(n * sizeof(char *));for (int i 0; i n; i) {capacities[i] (char *) malloc((20 1) * sizeof(char));scanf(%s, capacities[i]);}for (int i 0; i n; i) {for (int j i 1; j n; j) {if (convert(capacities[i]) convert(capacities[j])) {char *temp capacities[i];capacities[i] capacities[j];capacities[j] temp;}}}for (int i 0; i n; i) {printf(%s\n, capacities[i]);}return 0;
}
C
示例1 输入输出示例仅供调试后台判题数据一般不包含示例
输入
3
1G
2G
1024M
输出
1G
1024M
2G
说明
1G和1024M容量相等稳定排序要求保留它们原来的相对位置故1G在1024M之前。
示例2 输入输出示例仅供调试后台判题数据一般不包含示例
输入
3
2G4M
3M2G
1T
输出
3M2G
2G4M
1T
说明
1T的容量大于2G4M2G4M的容量大于3M2G。
#include bits/stdc.husing namespace std;int getSize(string s)
{int ans 0;int curNum 0;for (char c: s) {if (isdigit(c)) {curNum curNum * 10 (c - 0);} else {if (c M) {ans curNum;} else if (c G) {ans curNum * 1024;} else if (c T) {ans curNum * 1024 * 1024;}curNum 0;}}return ans;
}bool cmp(const string s1, const string s2)
{return getSize(s1) getSize(s2);
}int main(int argc, const char *argv[])
{string s;int n;cin n;vectorstring size;while (n--) {cin s;size.push_back(s);}stable_sort(size.begin(), size.end(), cmp);for (string s: size) {cout s endl;}return 0;
}