MT29. 题目列表
描述
输入描述
输入一个数 n ,接下来有 n 行,每行输入一个字符串 name ,整数 X ,证书 Y ,依次表示每个题目的名称,提交次数和通过次数。输出描述
输出 n 行,按字典序从小到大排序后的题目,每行先输出一个字符串,题目的名称,再输出一个数,题目的难度等级用一个空格隔开。示例1
输入:
4 math 100 90 algorithm 10 8 string 50 1 dp 100 50
输出:
algorithm 3 dp 4 math 3 string 5
C 解法, 执行用时: 2ms, 内存消耗: 328KB, 提交时间: 2021-09-17
#include<stdio.h> #include<string.h> #include<stdlib.h> int cmp(const void*a,const void* b) { return strcmp(*(char**)a, *(char**)b); } int main() { int n=0; scanf("%d",&n); char** c = (char**)malloc(sizeof(char*)*n); int x = 0,y=0; float z = 0; for(int i=0;i<n;i++) { c[i] = (char*)malloc(sizeof(char)*110); scanf("%s",c[i]); int len = strlen(c[i]); c[i][len] = ' '; scanf("%d %d",&x,&y); z =(float) y/x; if(z>=0 && z <=0.3) { c[i][len+1] ='5'; } else if(z>0.3 && z <=0.6) { c[i][len+1] ='4'; } else { c[i][len+1] ='3'; } } qsort(c,n,sizeof(char*),cmp); for(int i =0;i<n;i++) { printf("%s\n",c[i]); } return 0; }
C 解法, 执行用时: 2ms, 内存消耗: 332KB, 提交时间: 2021-10-23
#include <stdio.h> #include <string.h> int Diff(int x, int y); //计算难度 int Diff(int x, int y) { double div = (double)y/(double)x; if(div > 0.6) return 3; else if(div > 0.3) return 4; else return 5; } int n; char arr[110][110]; //定义一个数组存放难度 int diff[110]; int Min[110]; int main() { int i, j, x, y, min; scanf("%d", &n); getchar(); for(i = 0; i < n; i++) { scanf("%s %d %d", &arr[i], &x, &y); getchar(); //计算难度 diff[i] = Diff(x, y); } for(i=0;i<n;i++) { for(min=0; Min[min]; min++); for(j=min+1;j<n;j++) if(!Min[j] && strcmp(arr[j],arr[min])<0) min = j; for(j=0;arr[min][j];j++) putchar(arr[min][j]); printf(" %d\n",diff[min]); Min[min] = 1; } return 0; }