#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//#define __DEBUG
#define PHONESIZE 40
typedef struct _phone_stat {
char phone[PHONESIZE];
int count;
} phone_stat;
char CHAR_MAP[0x100];
int count;
int nitems = 0;
void charmap_init(void) {
int i;
for (i='0'; i<='9'; ++i) {
CHAR_MAP[i] = i;
}
CHAR_MAP['A'] = '2';
CHAR_MAP['B'] = '2';
CHAR_MAP['C'] = '2';
CHAR_MAP['D'] = '3';
CHAR_MAP['E'] = '3';
CHAR_MAP['F'] = '3';
CHAR_MAP['G'] = '4';
CHAR_MAP['H'] = '4';
CHAR_MAP['I'] = '4';
CHAR_MAP['J'] = '5';
CHAR_MAP['K'] = '5';
CHAR_MAP['L'] = '5';
CHAR_MAP['M'] = '6';
CHAR_MAP['N'] = '6';
CHAR_MAP['O'] = '6';
CHAR_MAP['P'] = '7';
CHAR_MAP['R'] = '7';
CHAR_MAP['S'] = '7';
CHAR_MAP['T'] = '8';
CHAR_MAP['U'] = '8';
CHAR_MAP['V'] = '8';
CHAR_MAP['W'] = '9';
CHAR_MAP['X'] = '9';
CHAR_MAP['Y'] = '9';
CHAR_MAP['-'] = '-';
}
void convert(char *dest, char *src) {
char c;
int i = 0;
int j = 0;
int k = 0;
while((c = src[i++]) != '\0') {
char candy = CHAR_MAP[c];
if (candy != '-') {
dest[j++] = candy;
}
if (j == 3) {
dest[j++] = '-';
}
}
dest[j] = '\0';
}
void put(phone_stat **items, char *phone_buf) {
int i;
phone_stat *stat_p;
char phone[PHONESIZE];
convert(phone, phone_buf);
for (i=0; i<count; ++i) {
stat_p = items[i];
if (!stat_p) {
stat_p = (phone_stat *)malloc(sizeof(phone_stat));
strcpy(stat_p->phone, phone);
stat_p->count = 1;
nitems++;
items[i] = stat_p;
return;
} else if (strcmp(stat_p->phone, phone) == 0) {
stat_p->count += 1;
return;
}
}
}
#ifdef __DEBUG
char *input[] = {
"4873279",
"ITS-EASY",
"888-4567",
"3-10-10-10",
"888-GLOP",
"TUT-GLOP",
"967-11-11",
"310-GINO",
"F101010",
"888-1200",
"-4-8-7-3-2-7-9-",
"487-3279"
};
count = 12;
#endif
int main(void) {
phone_stat *stat;
phone_stat **items;
phone_stat **gt1;
int i, j;
int size;
int ngt1;
charmap_init();
#ifndef __DEBUG
scanf("%d", &count);
if (count <= 0) {
exit(1);
}
#endif
size = sizeof(phone_stat *) * count;
items = (phone_stat **)malloc(size);
memset(items, 0, size);
for (i=0; i<count; ++i) {
#ifndef __DEBUG
char buf[PHONESIZE];
scanf("%s", buf);
put(items, buf);
#else
put(items, input[i]);
#endif
}
size = sizeof(phone_stat *) * nitems;
gt1 = (phone_stat **)malloc(size);
j = 0;
for (i=0; i<nitems; ++i) {
if (items[i]->count > 1) {
gt1[j++] = items[i];
}
}
ngt1 = j;
for (i=0; i<ngt1; ++i) {
for (j=i+1; j<ngt1; ++j) {
if (strcmp(gt1[i]->phone, gt1[j]->phone) > 0) {
phone_stat *inter = gt1[i];
gt1[i] = gt1[j];
gt1[j] = inter;
}
}
printf("%s %d\n", gt1[i]->phone, gt1[i]->count);
}
for (i=0; i<nitems; ++i) {
free(items[i]);
}
free(items);
free(gt1);
return 0;
}
TLE, 考,从这1001,1002两题都发现偶的代码写的太复杂了。需要改进啊,参考了别人的代码,改写成
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//#define __DEBUG
#define PHONESIZE 0x30
#define HTSIZE 10000000
char CHAR_MAP[0x100] = {127};
int count;
int nitems = 0;
unsigned char phone_hashtable[HTSIZE] = {0};
void charmap_init(void) {
int i;
for (i='0'; i<='9'; ++i) {
CHAR_MAP[i] = i - '0';
}
CHAR_MAP['A'] = 2; CHAR_MAP['B'] = 2; CHAR_MAP['C'] = 2;
CHAR_MAP['D'] = 3; CHAR_MAP['E'] = 3; CHAR_MAP['F'] = 3;
CHAR_MAP['G'] = 4; CHAR_MAP['H'] = 4; CHAR_MAP['I'] = 4;
CHAR_MAP['J'] = 5; CHAR_MAP['K'] = 5; CHAR_MAP['L'] = 5;
CHAR_MAP['M'] = 6; CHAR_MAP['N'] = 6; CHAR_MAP['O'] = 6;
CHAR_MAP['P'] = 7; CHAR_MAP['R'] = 7; CHAR_MAP['S'] = 7;
CHAR_MAP['T'] = 8; CHAR_MAP['U'] = 8; CHAR_MAP['V'] = 8;
CHAR_MAP['W'] = 9; CHAR_MAP['X'] = 9; CHAR_MAP['Y'] = 9;
CHAR_MAP['-'] = '-';
}
void convert(int *value, char *src) {
char c;
int val = 0;
int i = 0;
while((c = src[i++]) != '\0') {
char candy = CHAR_MAP[c];
if (candy >= 0 && candy < 10) {
val *= 10;
val += candy;
}
}
*value = val;
}
void printNumber(int number, int count) {
printf("%03d-%04d %d\n", number/10000, number % 10000, count);
}
#ifdef __DEBUG
char *input[] = {
"0000000",
"000-0000",
"010-0001",
"4873279",
"ITS-EASY",
"888-4567",
"3-10-10-10",
"888-GLOP",
"TUT-GLOP",
"967-11-11",
"310-GINO",
"F101010",
"888-1200",
"-4-8-7-3-2-7-9-",
"487-3279"
};
count = 12;
#endif
int main(void) {
int i;
int has_dup = 0;
charmap_init();
#ifndef __DEBUG
scanf("%d", &count);
if (count <= 0) {
exit(1);
}
#endif
for (i=0; i<count; ++i) {
int value;
#ifndef __DEBUG
char buf[PHONESIZE];
scanf("%s", buf);
convert(&value, buf);
#else
convert(&value, input[i]);
#endif
phone_hashtable[value] += 1;
}
for (i=0; i<HTSIZE; ++i) {
if (phone_hashtable[i] > 1) {
has_dup = 1;
printNumber(i, phone_hashtable[i]);
}
}
if (!has_dup) {
printf("No duplicates.\n");
}
return 0;
}
变成WA, faint 了。
分享到:
相关推荐
"TLE.rar_TLE_TLE KEPLER_boywah_coe2tle_tle2rv"这个压缩包文件所涉及的核心知识点,就是两行元素(Two Line Elements,简称TLE)以及与之相关的开普勒方程求解。TLE是一种简洁的格式,用于描述人造卫星的近似轨道...
《TLE5012B测速系统与STM32 SPI接口编程详解》 TLE5012B是一款高性能的霍尔效应速度传感器,常用于汽车和其他工业应用中的速度测量。这款传感器以其高精度和稳定性著称,是许多工程师在设计速度检测系统时的首选。...
在IT行业中,尤其是在航天和卫星轨道计算领域,`tle`(Two-Line Element Set)是一种广泛使用的格式,用于存储简化的卫星轨道数据。标题中的"cppOrbitTools.zip"是一个包含C++实现的库,用于处理与`tle`相关的任务,...
### TLE9255芯片知识点详解 #### 一、概述 TLE9255是一款高度集成的HS CAN收发器,具有部分网络功能,主要用于汽车和工业领域的高速CAN网络应用。该芯片的设计完全符合ISO 11898-2 (2016)标准,能够支持高达1Mbps的...
TLED92108规格书 TLE92108-232QX是一款多MOSFET驱动IC,专门用于控制高达十六个n通道MOSFET。它包括八个半桥驱动器,用于DC电机控制应用,例如汽车座椅控制或其他应用。 功能特点 1. 八个半桥驱动器:TLE92108-...
TLE5012则是一款磁编码器,常用于角度测量,例如在机器人、无人机、工业自动化等领域,能够提供精确的位置和速度信息。 在STM32F4与TLE5012的交互中,SPI(Serial Peripheral Interface)通信协议扮演着关键角色。...
标题中的"TLE5012"是一款磁位置传感器,常用于工业、汽车和机器人领域的角度检测。STM32F4是意法半导体公司生产的一款高性能的32位微控制器,广泛应用在嵌入式系统设计中。"模拟SPI"指的是通过软件编程实现SPI...
**TLE7242-2G:电磁阀驱动IC详解** TLE7242-2G是一款专为车辆变速箱控制系统设计的电磁阀驱动集成电路。这款芯片在汽车电子领域中扮演着至关重要的角色,因为它能够精准地控制电磁阀的工作,从而确保变速器的平稳...
tle_nnss33.com_cesium_卫星根数_TLE_ 是一个与卫星轨道数据处理相关的主题,主要涉及NNSS33.com网站、Cesium库以及TLE(Two-Line Element Set)卫星轨道根数。在IT行业中,特别是航天和地理信息系统(GIS)领域,...
TLE6209作为一款集成驱动芯片,在直流电机的控制中发挥着核心作用。本文档详细记录了TLE6209调试的过程,以及在项目开发中的实际应用,为我们提供了一个可以直接使用的电路设计参考。 首先,TLE6209芯片采用SPI通信...
TLE5012B芯片作为一款基于巨磁阻(GMR)效应的磁性角度传感器,以其高精度、高稳定性的特性,在多个行业中扮演了重要角色。本文将详细介绍TLE5012B的功能特性、应用场景、与控制器的集成方式以及如何利用多种通信协议...
TLE(Two-Line Element Set)是描述人造卫星轨道的一种简洁格式,它包含两行文本数据,这些数据可以用来计算卫星在地球轨道上的精确位置。在本项目中,我们将探讨如何使用Java语言来读取TLE数据,并利用SGP4...
用CPU的16位SPI驱动恒电流控制芯片TLE7242的源码。
### TLE及程序由TLE到COE #### 一、TLE简介 TLE(Two-Line Element Set)是一种广泛使用的格式,用于描述人造卫星在地球轨道上的位置和速度。这种格式是由美国的北美防空联合司令部(NORAD)所创建的。TLE数据包含...
TLE5012是一种基于巨磁阻(GMR)技术的角位置传感器,它主要用于转子位置的检测,特别适用于三项电机的控制。TLE5012角度传感器的数据手册,版本号为V1.0,出版日期为2010年11月,由Infineon Technologies AG公司...
TLE5012B资料,包含寄存器手册及部分应用原理
**TLE5012B绝对位置传感器** TLE5012B是一款高精度、高性能的绝对位置传感器,常用于工业自动化、机器人控制、电机定位等应用领域。这款传感器能够提供连续的、非接触式的角度测量,其输出的数据包含了完整的360度...
本人用Qt开发的一个小软件,针对TLE格式的卫星轨道根数数据。可输入数据或加载数据文件,批量修改TLE数据对应的星历时刻,显示转换结果、导出数据等。软件可用于仿真中将处理好的TLE数据应用到其他时间段、合并多个...
本文将详细探讨英飞凌SBC(System Basis Chip)TLE9262的配置函数,以及它在汽车应用中的重要性。 SBC,即系统基础芯片,是集成多种功能于一身的微控制器,通常包括电源管理、通信接口、模拟电路等,为系统提供必要...
英飞凌的TLE9261系列是针对汽车电子应用设计的一款中端系统基础芯片(System Basis Chip,SBC),特别适用于车身控制系统。这款芯片集成了电压调节器、电源管理功能以及支持高速CAN(Controller Area Network)收发...