Java教程

PTA 7-3 统计字母比例

本文主要是介绍PTA 7-3 统计字母比例,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

7-3 统计字母比例

单链表是一种数据结构,由若干个结点组成。每个结点包含数据和下一个结点的地址。从头结点开始,通过下一个结点的地址找到下一个结点,如此循环,直到下一个结点的地址为空。

现给出一个单链表,每个结点包含的数据是一个字符(大写英文字母)。求该链表上的结点数据中各个字母所占比例。

输入格式:

第一行给出链表第一个结点的地址H和要给出的结点总个数N。其中结点地址H用5位非负整数表示,N为不大于10000的正整数。 之后N行,每行按如下格式给出结点信息:

Address Data Next

Address为结点地址,Data为A-Z中的一个字母,Next为下一个结点的地址,Address和Next格式同H。当Next为-1时表示该结点没有下一个结点,链表遍历结束。

输出格式:

按A-Z的顺序,按以下格式输出各个字母所占比例:

Character Percentage

其中Character为英文字母, Percentage为百分比,保留到小数点后2位。中间以空格分隔。 如果该字母没有出现过,则不输出。

输入样例:

00001 10
01044 E 01055
00100 C 01011
00001 D 00100
09996 D 00253
01011 A 00045
00045 V 09876
09876 E 09996
00253 D 00999
00999 A 01044
01055 G -1结尾无空行

输出样例:

A 20.00%
C 10.00%
D 30.00%
E 20.00%
G 10.00%
V 10.00%结尾无空行

中规中矩,没有偷懒的写法:

#include<iostream>
#include<iomanip>
using namespace std;
typedef char ElemType;

struct LNode
{
    int next;
    ElemType data;
}LinkList[100000];

int main()
{
    int base,n,alpha[27]={0};
    cin>>base>>n;
    if(base>100000||n>10000||n<0||base<0)
    {
        return 0;
    }
    for(int i=0;i<n;i++)
    {
        int address,next;
        char data;
        cin>>address>>data>>next;
        LinkList[address].data=data;
        LinkList[address].next=next;
    }
    int b=base,count=0;
    for(int i=0;i<n;i++)
    {
        if(LinkList[b].next==-1)
        {
           alpha[LinkList[b].data-'A']++;
           count++;
           break;
        }
        alpha[LinkList[b].data-'A']++;
        b=LinkList[b].next;
        count++;
    }
    for(int i=0;i<26;i++)
    {
        if(alpha[i]>0)
        {
            cout<<char(i+'A')<<" "<<setiosflags(ios::fixed)<<setprecision(2)<<alpha[i]*100./count<<"%"<<endl;
        }
        continue;
    }
    return 0;
}


这篇关于PTA 7-3 统计字母比例的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!