zoukankan      html  css  js  c++  java
  • 10008 What's Cryptanalysis?

    题目大意:

    题目原文:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=12&page=show_problem&problem=949

    题目是要计算所给的文字中计算出各个字母的数量,然后按从大到小的顺序输出,如果数量相同的按字母顺序排列。数量是0的不用输出。

    题目只需要逐个记录输入的字符并计数就可以了。。。输入开头的数字代表的是接下来有几行,但是这几行的字符都是一起统计的,所以可以直接读入字符,并不需要管他有几行。 直接使用while(scanf("%c",&c)!=EOF)循环来逐个读入字符。用一个包含一个大写字母和一个数字的结构体数组来保存数量。按顺序表示好A-Z之后,输入的字符如果是大写字符,减去'A'字符得到结构体数组的编号(从0开始的),小写字符要减'a'。

    输出的时候从0开始逐一检索找出最大值,如果有数量相等的要取前面的字母先输出。每输出完一个要把当前字母的数据变为0;输出结束的标志是找到的最大值为0,说明全部都已经输出完成了。

    附上代码:

    View Code
     1 #include<stdio.h>
     2 struct al
     3 {
     4  int n;
     5  char alph;       
     6 };
     7 int main()
     8 {
     9  struct al a[26];
    10  char c;
    11  int i,maxi,bo;
    12  for(i=0;i<26;i++)
    13  {
    14   a[i].n=0;
    15   a[i].alph=i+'A';//初始化结构体 
    16  }
    17  while(scanf("%c",&c)!=EOF)
    18  {
    19   if(c>='A'&&c<='Z')//大写字母 
    20   {
    21    a[c-'A'].n++;                                    
    22   }
    23   else if(c>='a'&&c<='z')//小写字母 
    24   {
    25    a[c-'a'].n++;
    26   } 
    27  }
    28  maxi=0;
    29  bo=0;
    30  while(1)
    31  {
    32   for(i=1;i<26;i++)
    33   {
    34    if(a[maxi].n<a[i].n) maxi=i;//找出最大值的编号 
    35   }
    36   if(a[maxi].n!=0)
    37   {
    38    printf("%c %d\n",a[maxi].alph,a[maxi].n);
    39    a[maxi].n=0;//输出数据后重新初始化 
    40    maxi=0;
    41   }
    42   else break;//最大值等于0的时候结束输出 
    43  }
    44  return 0;
    45 }
  • 相关阅读:
    不同浏览器的JS如何兼容?
    过滤器如何配置(javax.servlet.Filter)?
    hibernate中 dialect,lazy,inverse,cascade属性的用途?
    json注记
    php: $$str
    MySql计算字段的长度
    封装一个获取变量准确类型的函数
    JavaScript如何创建一个对象
    python+selenium自动登录163邮箱
    获取cookie
  • 原文地址:https://www.cnblogs.com/syiml/p/2910778.html
Copyright © 2011-2022 走看看