书山有径勤为路>>>>>>>>

<<<<<<<<学海无涯苦作舟!

映射在编程中的应用

1.

题目:判断断一个由a-z这26个字符组成的字符串中哪个字符出现的次数最多。

#include<stdio.h>

#include "string.h"

int main()

{

int n, Case[26], j, max;

char str[1001];

scanf("%d", &n);

for(int i=0; i<n; i++)

{

scanf("%s", str);

memset(Case, 0, sizeof(Case));

for(j=0; j<strlen(str); j++)

Case[str[j]-'a']++;  //注意一下这个用法。可以说这也是一个小技巧呀。

max = 0;

for(j=0; j<26; j++)

{

if(Case[j] > Case[max])

{

max = j;

}

}

printf("%c %d\n", max+'a', Case[max]);

}

}

在这道题目中,str[i]-'a'恰好有26种不同的情况,正好对应

26个字母,我们又恰恰开了一个大小为26的数组,这个数组是

用来干什么的呢?就是用来统计对应的26个字母出现的次数的。

这种层层对应的关系,感觉确实有点美妙呀。不错。

但是下面的更是一绝呢!


2.

题目:A、B和C映射到2

        D、E和F映射到3

        G、H和I映射到4

        J、K和L映射到5

        M、N和O映射到6

        P、R和S映射到7

        T、U和V映射到8

        W、X和Y映射到9

        0、1、2、3、4、5、6、7、8、9就是它们本身了。

        由以上的字符和数字来组成电话号码。可以是纯数字,可以是纯字符,可以是混合的。

        电话号码一共有8位,不算'-'连接符号。

        让你找出相同的号码和相同号码的次数。

#include<stdio.h>

#include "stdlib.h"

#include "string.h"

char map[]="22233344455566677778889999";

char str[80], tel_Num[100000][9];

int cmp(const void * elem1, const void * elem2)

{

return (strcmp((char *)elem1, (char *)elem2));

}

void Standard(int n)  //这个程序写的十分之经典,程序的流程十分的细致。

{

    int j, k;

j = k = -1;

while(k<8)

{

j++;

if(str[j]=='-')

continue;

k++;

if(k==3)

{

tel_Num[n][k]='-';

k++;

}

if(str[j]>='A' && str[j]<='Z')

{

tel_Num[n][k] = map[str[j]-'A'];

continue;

}

tel_Num[n][k] = str[j];

}

tel_Num[n][k]='\0';  //这个结束的标志在字符串结束时一定要加上。否则会出现不可预见的错误。

return;

}

int main()

{

int n, i, j;

bool flag;

scanf("%d", &n);

for(i=0; i<n; i++)

{

scanf("%s", str);

Standard(i);

}

qsort(tel_Num, n, 9, cmp);

flag = true;

i = 0;

while(i<n)

{

j = i;

i++;

while (i<n && strcmp(tel_Num[i], tel_Num[j])==0)

{

i++;

}

if(i-j>1)

{

printf("%s %d\n", tel_Num[j], i-j);

flag = false;

}

}

if(flag)

{

printf("No duplicates.\n");

}

}

map[] 这个字符串数组开的十分的好呀!

str[i]-'A'正好对应不同的下标,

map[] 中不同的下标正好对应不同的

下标对应的数字。

有了这个工具,就可以省去好多不必要的代码,

大大的简化我们的程序,使我们的思路更加的

清晰。这个恰恰体现了映射的好处呢。

我想这道题目的本意是让大家学会用映射的

数组来优化我们的代码,提高我们的做题的

效率和简化我们做题的思路,等等。

posted on 2011-09-19 22:23  More study needed.  阅读(552)  评论(0编辑  收藏  举报

导航

书山有径勤为路>>>>>>>>

<<<<<<<<学海无涯苦作舟!