10222 - moocHW7b   

Description

搜尋某個價位之間的產品
先依品牌名稱排序
同一品牌再依照評價從高到低排序
評價相同再依照價位由低價到高價排序

提示:
1. 自己寫一個字串比對的函數,只比對品牌名稱,也就是兩個字串從開頭一直比到到第一個空白出現為止。如果都完全一樣就傳回 0 ,否則就依照字元 ASCII 大小傳回 正值或負值。
2. 呼叫 qsort 進行排序,主要任務是把 qsort 需要的 compare 函數寫出來
3. 都用指標陣列,讓排序的動作只會改變指標,而不需要真的搬動 data item。

範例程式

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
// #define ONLINE_JUDGE

/*
struct for product items
*/
typedef struct _Product {
    char name[51];
    float price;
    float review;
    int  num_reviews;
} Product;

int compare(const void *a, const void *b)
{
    Product *ia, *ib;
    ia = *(Product **)a;
    ib = *(Product **)b;
    /* your code here */
}

int my_strcmp(char *s1, char *s2)
{
    /* your code here */
}
int compare_name(const void *a, const void *b)
{
    /* your code here */
}

void show_product(Product *item)
{
    printf("%s, ", item->name);
    printf("$%.2f, ", item->price);
    printf("%.1f\n", item->review);
}

int main(void)
{
    Product **items;
    int i, j;
    int ndata, nqueries;
    Product **filtered;
    float lower, upper;
    int num;

#ifndef ONLINE_JUDGE
    freopen("testcase2", "r", stdin);
    //freopen("out1", "w", stdout);
#endif
    scanf("%d", &ndata);
    while (getchar() !='\n');

    items = (Product**) malloc(sizeof(Product*) * ndata);

    for (i=0; i<ndata; i++) {
        items[i] = (Product*) malloc(sizeof(Product));
        fgets(items[i]->name, 31, stdin);
        items[i]->name[strlen(items[i]->name)-1] = '\0';
        scanf("%f", &items[i]->price);
        scanf("%f", &items[i]->review);
        scanf("%d", &items[i]->num_reviews);
        while (getchar() !='\n');
    }

    scanf("%d", &nqueries);
    while (getchar() !='\n');

    qsort(items, ndata, sizeof(Product *), compare);

    filtered = (Product**) malloc(sizeof(Product*) * ndata);
    for (i=0; i<nqueries; i++) {
        scanf("%f%f", &lower, &upper);
        printf("%.2f<=price<=%.2f\n", lower, upper);

        /* your code here */

    }

    for (i=0; i<ndata; i++) {
        free(items[i]);
    }
    free(items);
    free(filtered);
    return 0;
}

 

Input

第一行的數字代表有幾個產品
接著每四行代表一個產品的資訊:
產品名稱
產品價格
產品評價
產品評價數

再來是一個數字,代表有幾筆 query
之後的每一行代表一筆 query
每筆 query 由兩個數字組成,代表價格區間

Output

根據每筆 query 輸出:
價格下限<=price<=價格上限
產品名稱1, 產品價格1, 產品評價1
...
產品名稱N, 產品價格N, 產品評價N

每一個價格區間下面可能會接好幾個產品
請依照題目要求將這些產品排序好

Sample Input  Download

Sample Output  Download

Tags

sort 韩永楷老师数据结构mooc



Discuss