2005年華中科技大學計算機保研機試真題

#include<stdio.h>
#include<string.h>

struct location
{
    char c;     //字符
    int n[100]; //該字符在數組中的位置
    int count;  //該字符在數組中的個數
};

struct location loc[50];
void Location(char *str);

int main()
{
    char str[101];
    while(scanf("%s",&str)!=EOF)
    {
        Location(str);
    }
    return 0;
}

void Location(char *str)
{
    int len=strlen(str);
    int i,j,h,count;
    int k=0;    //需要輸出的行數
    int flag;   //檢查是否重複
    int len1;   //同一個字符的重複次數
    char c;
    for(i=0;i<len;i++)
    {
        c=str[i];
        flag=0;
        for(h=0;h<k;h++)
        {
            if(loc[h].c==c)
            {
                flag=1;
                break;
            }
        }
        if(flag==1)
            continue;
        count=0;
        for(j=0;j<len;j++)
        {
            if(str[j]==c)
            {
                count++;
                if(count>1)
                    loc[k].n[count-1]=j;
            }
        }
        if(count>1)
        {
            loc[k].n[0]=i;
            loc[k].c=c;
            loc[k].count=count;
            k++;
        }
    }

    //輸出
    printf("\n");
    for(i=0;i<k;i++)
    {
        len1=loc[i].count;
        for(j=0;j<len1-1;j++)
            printf("%c:%d,",loc[i].c,loc[i].n[j]);
        printf("%c:%d\n",loc[i].c,loc[i].n[len1-1]);
    }
    printf("\n");
}

/*************************
Author:張女名
Date:2017/3/9
*************************/

題目描述:
對給定的一個字符串,找出有重複的字符,並給出其位置,如:abcaaAB12ab12
輸出:a,1;a,4;a,5;a,10,b,2;b,11,1,8;1,12, 2,9;2,13。

輸入:
輸入包括一個由字母和數字組成的字符串,其長度不超過100。

輸出:
可能有多組測試數據,對於每組數據,
按照樣例輸出的格式將字符出現的位置標出。

樣例輸入:
abcaaAB12ab12

樣例輸出:
a:0,a:3,a:4,a:9
b:1,b:10
1:7,1:11
2:8,2:12

提示:
1、下標從0開始。
2、相同的字母在一行表示出其出現過的位置。

來源:
2005年華中科技大學計算機保研機試真題

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章