电话号码分身(C语言实现)

2023-10-20 13:59

本文主要是介绍电话号码分身(C语言实现),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1、题目描述

继MIUI8推出手机分身功能之后,MIUI9计划推出一个电话号码分身的功能:首先将电话号码中的每个数字加上8取个位,然后使用对应的大写字母代替("ZERO", "ONE", "TWO", "THREE", "FOUR", "FIVE", "SIX", "SEVEN", "EIGHT", "NINE"),然后随机打乱这些字母,所生成的字符串即为电话号码对应的分身。

具体示例如下图:


2、思路分析

a、输入的是被打乱的字符,不可能通过匹配每个数字所对应的单词来获得相应的数字,但是每个数字所对应的单词都是由英文字符构成的,通过找到每个数字所对应的单词中独有的字母的个数就可以找到对应的这个数字的个数。

通过分析可以看出:在 "ZERO", "ONE", "TWO", "THREE", "FOUR", "FIVE", "SIX", "SEVEN", "EIGHT", "NINE"这10个单词中,0、2、4、6、8英文单词中的'Z'、'W'、'U'、'X'、'G'是各自独有的字符,去掉上面5个数字: 1、3、5、7英文单词中的'O'、'T'、'F'、'S'也是各自独有的字符,最后还剩下一个9可以选择它所对应的任意一个字符作为它的独有字符,这里本人选择'I'作为其独有的字符。搞清楚上面对应的关系后,通过逐步计算可以最终确定各个数字的个数。

b、要把计算所得的数字进行转换来求得原始的数据:我们知道(原始数据+8)%10=转换后数据,那么可知原始数据=(转换后数据+2)%10.

3、算法实现

#include <stdio.h>
#include <string.h>/* 程序入口 */
int main()
{int i, j, k;int T;char str[10000];	/* 存放要输入的字符串 */int length;			/* 保存要输入的字符串的长度 */int str_num[26];	/* 保存字符串中每个字符出现的次数 */int num[10];		/* 保存字符串转换后的数字的出现次数 */int origin[10];		/* 求出转换后数字对应的原始数字的相应的次数 *//* 表示要输入的字符串数量 */fscanf(stdin, "%d", &T);for(i = 0; i < T; i++){/* 读取字符串并获取其长度 */fscanf(stdin, "%s", str);length = strlen(str);/* 清零相关缓冲区 */for(j = 0; j < 26; j++)str_num[j] = 0;for(j = 0; j < 10; j++){num[j] = 0;}/* 统计字符串当中每个字母的个数 */for(j = 0; j < length; j++){str_num[str[j]-'A']++;;}/*	"ZERO", "ONE", "TWO", "THREE", "FOUR", "FIVE", "SIX", "SEVEN", "EIGHT", "NINE"*  上述所示的10个数字所对应的英文单词的大写,可以看出:*		0、2、4、6、8英文单词中的'Z'、'W'、'U'、'X'、'G'是各自独有的字符*		去掉上面5个数字: 1、3、5、7英文单词中的'O'、'T'、'F'、'S'也是各自独有的字符*		最后还剩下一个9本人选择'I'作为其独有的字符*	搞清楚对应的关系后,通过逐步计算可以最终确定各个数字的个数,如下计算所示:*/num[0] = str_num['Z'-'A']; str_num['E'-'A']-=num[0]; str_num['R'-'A']-=num[0];str_num['O'-'A']-=num[0];num[2] = str_num['W'-'A']; str_num['T'-'A']-=num[2]; str_num['O'-'A']-=num[2];num[4] = str_num['U'-'A']; str_num['F'-'A']-=num[4]; str_num['O'-'A']-=num[4];str_num['R'-'A']-=num[4];num[6] = str_num['X'-'A']; str_num['S'-'A']-=num[6]; str_num['I'-'A']-=num[6];num[8] = str_num['G'-'A']; str_num['E'-'A']-=num[8]; str_num['I'-'A']-=num[8]; str_num['H'-'A']-=num[8];str_num['T'-'A']-=num[8];num[1] = str_num['O'-'A']; str_num['N'-'A']-=num[1]; str_num['E'-'A']-=num[1];num[3] = str_num['T'-'A']; str_num['H'-'A']-=num[3]; str_num['R'-'A']-=num[3]; str_num['E'-'A']-=num[3]*2;num[5] = str_num['F'-'A']; str_num['I'-'A']-=num[5]; str_num['V'-'A']-=num[5]; str_num['E'-'A']-=num[5];num[7] = str_num['S'-'A']; str_num['E'-'A']-=num[7]*2;str_num['V'-'A']-=num[7];str_num['N'-'A']-=num[7];num[9] = str_num['I'-'A']; str_num['N'-'A']-=num[9]*2;str_num['E'-'A']-=num[9];/* 上面所求的各种数字的个数是转换后的,要求原始数字个数,需要进行如下转换 */for(j = 0; j < 10; j++){origin[(j+2)%10] = num[j];}/* 按照从0到9的顺序打印各个数字,根据每个数字个数来确定打印几次 */for(j = 0; j < 10; j++)for(k = 0; k < origin[j]; k++)fprintf(stdout, "%d", j);fprintf(stdout, "\n");}return 0;
}

这篇关于电话号码分身(C语言实现)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/247579

相关文章

C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)

《C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)》本文主要介绍了C#集成DeepSeek模型实现AI私有化的方法,包括搭建基础环境,如安装Ollama和下载DeepS... 目录前言搭建基础环境1、安装 Ollama2、下载 DeepSeek R1 模型客户端 ChatBo

Qt实现发送HTTP请求的示例详解

《Qt实现发送HTTP请求的示例详解》这篇文章主要为大家详细介绍了如何通过Qt实现发送HTTP请求,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1、添加network模块2、包含改头文件3、创建网络访问管理器4、创建接口5、创建网络请求对象6、创建一个回复对

C++实现回文串判断的两种高效方法

《C++实现回文串判断的两种高效方法》文章介绍了两种判断回文串的方法:解法一通过创建新字符串来处理,解法二在原字符串上直接筛选判断,两种方法都使用了双指针法,文中通过代码示例讲解的非常详细,需要的朋友... 目录一、问题描述示例二、解法一:将字母数字连接到新的 string思路代码实现代码解释复杂度分析三、

grom设置全局日志实现执行并打印sql语句

《grom设置全局日志实现执行并打印sql语句》本文主要介绍了grom设置全局日志实现执行并打印sql语句,包括设置日志级别、实现自定义Logger接口以及如何使用GORM的默认logger,通过这些... 目录gorm中的自定义日志gorm中日志的其他操作日志级别Debug自定义 Loggergorm中的

Spring Boot整合消息队列RabbitMQ的实现示例

《SpringBoot整合消息队列RabbitMQ的实现示例》本文主要介绍了SpringBoot整合消息队列RabbitMQ的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的... 目录RabbitMQ 简介与安装1. RabbitMQ 简介2. RabbitMQ 安装Spring

Gin框架中的GET和POST表单处理的实现

《Gin框架中的GET和POST表单处理的实现》Gin框架提供了简单而强大的机制来处理GET和POST表单提交的数据,通过c.Query、c.PostForm、c.Bind和c.Request.For... 目录一、GET表单处理二、POST表单处理1. 使用c.PostForm获取表单字段:2. 绑定到结

springMVC返回Http响应的实现

《springMVC返回Http响应的实现》本文主要介绍了在SpringBoot中使用@Controller、@ResponseBody和@RestController注解进行HTTP响应返回的方法,... 目录一、返回页面二、@Controller和@ResponseBody与RestController

nginx中重定向的实现

《nginx中重定向的实现》本文主要介绍了Nginx中location匹配和rewrite重定向的规则与应用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下... 目录一、location1、 location匹配2、 location匹配的分类2.1 精确匹配2

Nginx之upstream被动式重试机制的实现

《Nginx之upstream被动式重试机制的实现》本文主要介绍了Nginx之upstream被动式重试机制的实现,可以通过proxy_next_upstream来自定义配置,具有一定的参考价值,感兴... 目录默认错误选择定义错误指令配置proxy_next_upstreamproxy_next_upst

nginx生成自签名SSL证书配置HTTPS的实现

《nginx生成自签名SSL证书配置HTTPS的实现》本文主要介绍在Nginx中生成自签名SSL证书并配置HTTPS,包括安装Nginx、创建证书、配置证书以及测试访问,具有一定的参考价值,感兴趣的可... 目录一、安装nginx二、创建证书三、配置证书并验证四、测试一、安装nginxnginx必须有"-