第6周 搜索与排序

   1º 查找里程

   给你这样一张里程表,如何写一个程序,输入两地的地名,能输出期间的里程?

   

#include <stdio.h>
#include <string.h>
#define C_LEN 30

typedef struct city {
    char name1[C_LEN];
    char name2[C_LEN];
    int distance;
} City;
int main(void)
{
    City cities[] = {                 // 数据如何表示,感觉这样的方法太繁杂,有没有更好的表示方法???
        {"Atlanta", "Boston", 1108},
        {"Atlanta", "Chicago", 708},
        {"Boston", "Chicago", 994},
        {"Atlanta", "Denver", 1430},
        {"Boston", "Denver", 1998},
        {"Chicago", "Denver", 1021},
        {"Atlanta", "Detroit", 732},
        {"Boston", "Detroit", 799},
        {"Chicago", "Detroit", 279},
        {"Denver", "Detroit", 1283},
        {"Atlanta", "Houston", 791},
        {"Boston", "Houston", 1830},
        {"Chicago", "Houston", 1091},
        {"Denver", "Houston", 1034},
        {"Detroit", "Houston", 1276},
        {"Atlanta", "Los Angeles", 2191},
        {"Boston", "Los Angeles", 3017},
        {"Chicago", "Los Angeles", 2048},
        {"Denver", "Los Angeles", 1031},
        {"Detroit", "Los Angeles", 2288},
        {"Houston", "Los Angeles", 1541},
        {"Atlanta", "Miami", 663},
        {"Boston", "Miami", 1520},
        {"Chicago", "Miami", 1397},
        {"Denver", "Miami", 2107},
        {"Detroit", "Miami", 1385},
        {"Houston", "Miami", 1190},
        {"Los Angeles", "Miami", 2716},
        {"Atlanta", "New York", 854},
        {"Boston", "New York", 222},
        {"Chicago", "New York", 809},
        {"Denver", "New York", 1794},
        {"Detroit", "New York", 649},
        {"Houston", "New York", 1610},
        {"Los Angeles", "New York", 2794},
        {"Miami", "New York", 1334},
        {"Atlanta", "Philadelphia", 748},
        {"Boston", "Philadelphia", 315},
        {"Chicago", "Philadelphia", 785},
        {"Denver", "Philadelphia", 1739},
        {"Detroit", "Philadelphia", 609},
        {"Houston", "Philadelphia", 1511},
        {"Los Angeles", "Philadelphia", 2703},
        {"Miami", "Philadelphia", 1230},
        {"New York", "Philadelphia", 101},
        {"Atlanta", "San Francisco", 2483},
        {"Boston", "San Francisco", 3128},
        {"Chicago", "San Francisco", 2173},
        {"Denver", "San Francisco", 1255},
        {"Detroit", "San Francisco", 2399},
        {"Houston", "San Francisco", 1911},
        {"Los Angeles", "San Francisco", 387},
        {"Miami", "San Francisco", 3093},
        {"New York", "San Francisco", 2930},
        {"Philadelphia", "San Francisco", 2902},
        {"Atlanta", "Seattle", 2625},
        {"Boston", "Seattle", 3016},
        {"Chicago", "Seattle", 2052},
        {"Denver", "Seattle", 1341},
        {"Detroit", "Seattle", 2327},
        {"Houston", "Seattle", 2369},
        {"Los Angeles", "Seattle", 1134},
        {"Miami", "Seattle", 3303},
        {"New York", "Seattle", 2841},
        {"Philadelphia", "Seattle", 2816},
        {"San Francisco", "Seattle", 810}
    };

    char city1[C_LEN];
    char city2[C_LEN];

    printf("请输入第一个城市名: ");
    gets(city1);
    printf("请输入第二个城市名: ");
    gets(city2);
    for(int i = 0; i < sizeof(cities) / sizeof(cities[0]); i++)
    {
        if(strcmp(city1, city2) == 0)
        {
            printf("两个城市之间的距离: %d\n", 0);
            break;
        }
        else if((strcmp(city1, cities[i].name1) == 0 && strcmp(city2, cities[i].name2) == 0) ||
           (strcmp(city1, cities[i].name2) == 0 && strcmp(city2, cities[i].name1) == 0))
        {
            printf("两个城市之间的距离: %d\n", cities[i].distance);
            break;
        }
    }
    return 0;
}
View Code

   2º 排序

   题目内容:

   程序读入一个正整数n(0<n<=100000),然后读入n个整数,均为32位下的整数。输出对这个整数排序后的结果,每个整数后面有一个空格。

   输入格式:

   一个表示个数的正整数n,和n个整数,以空格间隔。

   输出格式:

   排序后的n的整数,每个整数后面有一个空格。

   输入样例:

   6 2 23 54 12 6 8

   输出样例:

   2 6 8 12 23 54

   解答:(So easy)

#include <stdio.h>
#include <stdlib.h>
void sort(int a[], int len);

int main(void)
{
    int count, i;
    scanf("%d", &count);
    int *number_array = (int *)malloc(count * sizeof(int));
    if(number_array != NULL)
    {
        for(i = 0; i < count; i++)
            scanf("%d", &number_array[i]);
    }
    sort(number_array, count);
    for(i = 0; i < count; i++)
        printf("%d ", number_array[i]);
    printf("\n");
    free(number_array);

    return 0;
}

void sort(int a[], int len)
{
    int temp;

    for(int i = 0; i < len - 1; i++)
    {
        for(int j = i; j < len; j++)
            if(a[i] > a[j])
            {
                temp = a[i];
                a[i] = a[j];
                a[j] = temp;
            }
    }
}
View Code

 

posted @ 2016-01-26 20:02  叶十一少  阅读(274)  评论(0编辑  收藏  举报