51NOD OJ 完美字符串
来源:互联网 发布:淘宝 进口啤酒真相 编辑:程序博客网 时间:2024/06/05 19:25
输入
输入一个字符串S(S的长度 <= 10000),S中没有除字母外的其他字符。
输出
由你将1-26分配给不同的字母,使得字符串S的完美度最大,输出这个完美度。
输入示例
dad
输出示例
77
分析: 由排序不等式,出现次数最多的字母显然应该给26。所以这个题目变成了统计每种字母出现的次数了,然后按照出现次数从大到小,依次分配从高到低的权值。这就是最朴素的贪心思想。
#include <stdio.h>#include <string.h>#include <stdlib.h>#define TRUE 1#define FALSE 0#define MAX_STRING_LEN 10000#define MAX_NUM 26int g_num[MAX_NUM] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26};int comp(const void*a,const void*b){return *(int*)a-*(int*)b;}int not_a_char(char c){if ((c >='a' && c <='z') || (c >= 'A' && c <= 'Z')){return FALSE;}else{return TRUE;}}/*是否是大写字母*/int is_a_uppercase(char c){if (c >= 'A' && c <= 'Z'){return TRUE;}else{return FALSE;}}/*是否是小写字母*/int is_a_lowercase(char c){if (c >= 'a' && c <= 'z'){return TRUE;}else{return FALSE;}}int char_to_num (char c){if (not_a_char(c)){printf("ERROR,NOT A CHAR!\n");return -1;}if (is_a_uppercase(c)){return c - 'A';}if (is_a_lowercase(c)){return c - 'a';}}int main(void){char *s1 = (char *)malloc(MAX_STRING_LEN * sizeof(char));if (NULL == s1){printf("alloc memory for s1 failed\n");return -1;}if(NULL == gets(s1)) { printf("get s1 failed.\n"); return -1; } int len = strlen(s1); int i=0; int count[MAX_NUM]={0}; int result = 0; for (; i<len; i++) { count[char_to_num(s1[i])]++; } qsort(count, MAX_NUM, sizeof(int), comp); for (i=0; i<MAX_NUM; i++) { result += (count[i] * g_num[i]); } printf("%d\n", result); free(s1); return 0;}
0 0
- 51NOD OJ 完美字符串
- 51nod-完美字符串
- 51nod 完美字符串
- 51 Nod 完美字符串
- 51NOD 1182 完美字符串
- 51nod 1182 完美字符串
- 51 nod 1182 完美字符串
- 51nod 1182 完美字符串
- 51nod 1182完美字符串
- 51nod 1182 完美字符串
- 51Nod 1182 完美字符串
- 【51Nod】1182 完美字符串
- 51nod 1182 完美字符串
- 51Nod 1182 完美字符串
- 51nod 1182 完美字符串
- 51Nod-1182-完美字符串
- 【51Nod】1182 - 完美字符串(贪心)
- 51Nod——完美字符串
- 影评之火影忍者博人传
- C编译: 动态连接库 (.so文件)
- Python爬虫开发(五):反爬虫措施以及爬虫编写注意事项
- 新手下载安装GitHub
- 二维码生成,中间加入图片
- 51NOD OJ 完美字符串
- ANSYS17.0 安装
- Transaction类
- Java String详解
- android的选项菜单
- Activity的四种启动模式
- finally为什么要在try块中的return之前执行
- 我的Android学习笔记2(学Android怎能不懂java)
- Linux段管理,BSS段,data段,.rodata段,text段