#include #include #include #include struct dish{ char name[100]; float price; }; int comparator (const void * p1, const void * p2){ return (*(int*)p1 - *(int*)p2); } void getOrder(struct dish dishesList[100], int dishesNumber, int* result){ float allPrises[dishesNumber]; float ascendingPrises[dishesNumber]; int* order = calloc(dishesNumber, sizeof(int)); int counter = 0; float temp; for(int i = 0; i < dishesNumber; i++){ allPrises[i] = dishesList[i].price; ascendingPrises[i] = allPrises[i]; } qsort(ascendingPrises, dishesNumber, sizeof(int), comparator); for(int i = 0; i < dishesNumber; i++){ for(int j = 0; j < dishesNumber; j++){ STEP: if(ascendingPrises[i] == allPrises[j]){ for(int y = 0; y < counter; y++){ if(order[y] == j){ j++; goto STEP; } } order[counter] = j; counter++; break; } } } memcpy(result, order, dishesNumber * sizeof(int)); } void getAlphabetOrder(int* order, struct dish dishesList[100], int dishesNumber){ int* result = calloc(dishesNumber, sizeof(int)); int counter = 0; int temp; for(int i = 0; i < dishesNumber; i++){ for(int j = i; j < dishesNumber; j++){ if(dishesList[order[i]].price == dishesList[order[j]].price){ if(dishesList[order[i]].name[0] < dishesList[order[j]].name[0]){ break; } else if(dishesList[order[i]].name[0] == dishesList[order[j]].name[0]){ if(dishesList[order[i]].name[1] < dishesList[order[j]].name[1]){ break; } else{ temp = order[i]; order[i] = order[j]; order[j] = temp; } } else{ temp = order[i]; order[i] = order[j]; order[j] = temp; } } } result[counter] = order[i]; counter++; } memcpy(order, result, dishesNumber * sizeof(int)); } int main(){ struct dish dishesList[100]; int i = 0; int finalCounter = 0; for(i = 0; fgets(dishesList[i].name, 100, stdin); i++){ finalCounter++; if(dishesList[i].name[0] == '\n' || dishesList[i].name[0] == '\0') finalCounter--; scanf("%f", &dishesList[i].price); if(dishesList[i].price == 0.0){ finalCounter--; break; } getchar(); } int* printOrder = calloc(finalCounter, sizeof(int)); getOrder(dishesList, finalCounter, printOrder); getAlphabetOrder(printOrder, dishesList, finalCounter); for(int j = 0; j < finalCounter; j++){ printf("%s", dishesList[printOrder[j]].name); printf("%f\n", dishesList[printOrder[j]].price); } return 0; }