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;
}

浙公网安备 33010602011771号