Cookie Monster
unknown
c_cpp
3 years ago
2.9 kB
6
Indexable
//Cookie Monster #include <stdio.h> #include <string.h> #define MAXN 10000 #define MAXLEN 10000 int n, k, cnt = 0, num = 0;//cnt為有幾列數字 int ans[MAXN] = {0}, cnt_7[MAXN] = {0}; char tmp[MAXN], str_hex[MAXN], str_dec[MAXN], d[MAXN][MAXLEN]; //d為把數字換為10進位的字串 int cmp_1(int a, int b){ if(cnt_7[a] < cnt_7[b]) return 1; else if(cnt_7[a] > cnt_7[b]) return -1; else{//a和b有相同數量的7 if(strlen(d[a]) < strlen(d[b])) return 1; else if(strlen(d[a]) > strlen(d[b])) return -1; else{ int res = strcmp(d[a], d[b]);//若d[a]>d[b] 則 res>0 if(res < 0) return 1; else if(res > 0) return -1; else return 0; //d[a]和d[b]是一樣的字串 } } } int cmp_2(int a, int b){ if(strlen(d[a]) > strlen(d[b])) return 1; else if(strlen(d[a]) < strlen(d[b])) return -1; else return strcmp(d[a], d[b]); } void bubble_sort1(){//由大排到小(7的多的 或 字串數字大的) for(int i = 0; i < cnt; i++){ for(int j = i; j < cnt; j++){ if(cmp_1(ans[i], ans[j]) > 0){ int temp = ans[i]; ans[i] = ans[j]; ans[j] = temp; } } } } void bubble_sort2(){//把前k個餅乾由小排到大 for(int i = 0; i < k; i++){ for(int j = i; j < k; j++){ if(cmp_2(ans[i], ans[j]) > 0){ int temp = ans[i]; ans[i] = ans[j]; ans[j] = temp; } } } } void find_ans(){ for(int i = 0; i < cnt; i++){ ans[i] = i; } bubble_sort1(); bubble_sort2(); for(int i = 0; i < k; i++){ printf("%s\n", d[ans[i]]); } } int hex_to_dec(int l, int r){ num = 0; strncpy(str_hex, tmp + l, r - l); sscanf(str_hex, "%x", &num);//將str_hex中的數字用16進位的方式存入num sprintf(str_dec, "%d", num);//將num轉換為10進位存入str_dec中 strcat(d[cnt], str_dec); memset(str_hex, '\0', MAXN); memset(str_dec, '\0', MAXN); } int main(){ scanf("%d%d", &n, &k); for(int i = 0; i < n; i++){ int index = 0; memset(tmp, '\0', MAXN); scanf("%s", tmp); for(int j = 0; j < strlen(tmp); j++){ if(tmp[j] == '|' || j == strlen(tmp) - 1){ if(j == strlen(tmp)-1) j = strlen(tmp); //printf("index1 = %d, index2 = %d\n", index, j); hex_to_dec(index, j); index = j + 1; } } for(int k = 0; k < strlen(d[cnt]); k++){//算7的這層迴圈不可放在迴圈j中,不然會重複計算 if(d[cnt][k] == '7'){ cnt_7[cnt]++; } } cnt++; } find_ans(); }
Editor is loading...