当前位置: 首页 > news >正文

C语言入门算法——回文数

题目描述:

若一个数(首位不为零)从左向右读与从右向左读都一样,我们就将其称之为回文数。

例如:给定一个十进制数 56,将 56 加 65(即把 56 从右向左读),得到 121 是一个回文数。

又如:对于十进制数 87:

STEP1:87+78=165
STEP2:165+561=726
STEP3:726+627=1353
STEP4:1353+3531=4884

在这里的一步是指进行了一次 N 进制的加法,上例最少用了 4 步得到回文数 4884。

写一个程序,给定一个 N(2≤N≤10 或 N=16)进制数 M(100 位之内),求最少经过几步可以得到回文数。如果在 30 步以内(包含 30 步)不可能得到回文数,则输出 Impossible!

输入格式

两行,分别是 N,M。

输出格式

如果能在 3030 步以内得到回文数,输出格式形如 STEP=ans,其中 ansans 为最少得到回文数的步数。

否则输出 Impossible!

输入输出样例

输入 #1

10
87

输出 #1

STEP=4

题目来源

P1015 [NOIP1999 普及组] 回文数

思路及部分代码:

1. 将字符解析成数字

//将字符解成数字
int char_number(char c){if(c >= '0' && c <= '9')return c-'0';else if(c >= 'A' && c <= 'F')return (c - 'A' + 10); else if(c >= 'a' && c <= 'f')return (c - 'a' + 10);elsereturn 0;
}

2. 各进制加运算法

//进行进制运算      2-10 || 16   
//返回值表示是否有进位
int operation(int x,int n){int a;int i = 0;number[0] = 0;for(i =0;i < n;i++){a = number_z[i] + number_z[n-i-1] + number[i];if(a >= x){number[i] = a - x;number[i+1] = 1; }else{number[i] = a;number[i+1] = 0;}}return number[n];
}

3. 判断数字是否满足实验要求

//传入number的位数,判定是否 是 同位数
int number_pd(int n){for(int i = 0; i<n;i++){if(number[i] != number[n-i-1])  return 0;   //不满足同位数要求}return 1;
}

4. 依次计算到题目要求的结束

    while(1){//将数值传入临时保存for(int i=0; i <cnt_n; i++){number_z[i] = number[i];}//超出计算次数if(cnt > 30){printf("Impossible!\r\n");return 0;}cnt_n = cnt_n + operation(n, cnt_n);cnt++;//如果满足同位数if(number_pd(cnt_n) == 1){printf("STEP=%d\r\n", cnt);break;}}

总代码:

#include <stdio.h>
#include <string.h>char M[100];
int number_z[10000];
int number  [10000] = {0};//将字符解成数字
int char_number(char c){if(c >= '0' && c <= '9')return c-'0';else if(c >= 'A' && c <= 'F')return (c - 'A' + 10); else if(c >= 'a' && c <= 'f')return (c - 'a' + 10);elsereturn 0;
}//将数字转换成字符
/*
char number_char(int n){if(n >= 0 && n<=9)return '0'+n;else if(n >= 10 && n<=15)return ('A'+n-10);
}*///进行进制运算      2-10 || 16   
//返回值表示是否有进位
int operation(int x,int n){int a;int i = 0;number[0] = 0;for(i =0;i < n;i++){a = number_z[i] + number_z[n-i-1] + number[i];if(a >= x){number[i] = a - x;number[i+1] = 1; }else{number[i] = a;number[i+1] = 0;}}return number[n];
}//传入number的位数,判定是否 是 同位数
int number_pd(int n){for(int i = 0; i<n;i++){if(number[i] != number[n-i-1])  return 0;   //不满足同位数要求}return 1;
}int main (){int n;scanf("%d",&n);scanf("%s",M);//将接收的字符串for(int i=0;i<strlen(M);i++){number[i] = char_number(M[i]);  }int cnt_n = strlen(M);int cnt = 0;    //用于计算步数while(1){//将数值传入临时保存for(int i=0; i <cnt_n; i++){number_z[i] = number[i];}//超出计算次数if(cnt > 30){printf("Impossible!\r\n");return 0;}cnt_n = cnt_n + operation(n, cnt_n);cnt++;//如果满足同位数if(number_pd(cnt_n) == 1){printf("STEP=%d\r\n", cnt);break;}}return 0;
}

总结:

  • 代码实现了进制转换和同位数判断的功能,并且在实现过程中使用了数组、循环、条件语句等基本的编程知识。

不足之处:

  • 变量名不够直观,例如 Mnumber_znumber 等变量名不够清晰,不便于阅读和理解。
  • 函数和变量的注释不够详细,没有说明其作用、输入和输出等信息,不便于阅读和理解。
  • 在进行进制运算时,代码中使用了 number 数组来保存结果,但是没有清空该数组,可能会导致计算结果错误。

改进意见:

  • 变量名应该更加直观,例如 M 可以改为 input_stringnumber_z 可以改为 temp_numbernumber 可以改为 result_number 等。
  • 在代码中添加注释,说明函数和变量的作用、输入和输出等信息,方便阅读和理解。
  • 在进行进制运算时,应该在每次运算前清空 number 数组,避免出现错误的计算结果。可以在每次运算前使用 memset 函数将 number 数组清空。

相关文章:

C语言入门算法——回文数

题目描述&#xff1a; 若一个数&#xff08;首位不为零&#xff09;从左向右读与从右向左读都一样&#xff0c;我们就将其称之为回文数。 例如&#xff1a;给定一个十进制数 56&#xff0c;将 56 加 65&#xff08;即把 56 从右向左读&#xff09;&#xff0c;得到 121 是一个…...

OceanBase—操作实践

文档结构 1、概念简介2、核心设计3、操作实践3.3、数据同步 官方文档&#xff1a;https://www.oceanbase.com/docs/oceanbase-database-cn 1、概念简介 版本分为社区版和企业版&#xff0c;其中企业版兼容MySQL 和Oracle数据库语法&#xff1b; 2、核心设计 存储层 复制层 …...

智慧用电安全管理系统

智慧用电安全管理系统 智慧用电安全管理系统是智能电网中客户侧关键的构成部分&#xff0c;是基本建设新型智慧城市的基本&#xff0c;将完成地区内各种各样用电设备的智能化系统监管&#xff0c;完成地区内日常生活与工作中安全性、舒服。 一、智慧用电安全管理系统介绍 …...

Rust语言入门第二篇-Cargo教程

文章目录 Rust语言入门第二篇-Cargo教程一&#xff0c;Cargo 是什么二&#xff0c;Cargo教程Cargo.toml文件src/main.rs 文件构建并运行Cargo项目 Rust语言入门第二篇-Cargo教程 本节提供对cargo命令行工具的快速了解。我们演示了它为我们生成新包的能力&#xff0c;它在包内编…...

测试用例的编写方式

学习目标 能对穷举场景设计测试点能对限定边界规则设计测试点能对多条件依赖关系进行设计测试点能对于项目业务进行设计测试点 目录 等价类划分法案例 等价类划分 说明&#xff1a;在所有测试数据中&#xff0c;具有某种共同特征的数据集合进行划分分类&#xff1a; 有效等…...

HarmonyOS实战开发-状态管理、通过使用页面级的状态变量 和应用级的状态变量 来实现应用的状态管理。

介绍 本示例通过使用页面级的状态变量 和应用级的状态变量 来实现应用的状态管理。 效果预览 使用说明 1.点击首页中的基本类型进入对应页面&#xff0c;点击按钮可以更改圆形的颜色&#xff1b;点击查看源码可以展示基本类型功能效果的源码。 2.点击首页中的数组类型进入对…...

【Java开发指南 | 第二篇】标识符、Java关键字及注释

专栏&#xff1a;Java开发指南 CSDN秋说 文章目录 标识符Java关键字Java注释 标识符 Java 所有的组成部分都需要名字。类名、变量名以及方法名都被称为标识符。 所有的标识符都应该以字母&#xff08;A-Z 或者 a-z&#xff09;,美元符&#xff08;$&#xff09;、或者下划线&…...

3D可视化技术:研发基地的科技新篇章

在科技日新月异的今天&#xff0c;我们生活在一个充满无限可能性的时代。而在这个时代中&#xff0c;3D可视化技术正以其独特的魅力&#xff0c;引领着科技领域的新一轮变革。 3D可视化技术通过三维图像的方式&#xff0c;将现实世界或虚拟世界中的物体、场景等以立体、逼真的形…...

蓝旭前端05:JavaScript进阶

蓝旭前端05&#xff1a;JavaScript进阶 基础简单复习 数据类型 基本数据类型&#xff1a;Number、String、Boolean、Null、Undefined等。引用数据类型&#xff1a;Object、Array、Function等。typeof操作符&#xff1a;返回数据类型的字符串形式。 变量 变量声明&#xff1…...

【docker-compose】安装及配置

目录 安装在线安装离线安装 配置mysql5.7bitnami/mysql8.3redisweb前后台分离部署前端https(SSL)配置nginx动态传参资源限制&#xff1a;内存、cpunacossentinelgateway 问题汇总iptables No chain/target/match by that namedocker-compose.yml修改mysql密码&#xff0c;重启后…...

【第十五届】蓝桥杯省赛C++b组

今年的蓝桥杯省赛已经结束了&#xff0c;与以往不同&#xff0c;今年又回到了8道题&#xff0c;而22&#xff0c;23年出现了10道题 大家觉得难度怎么样&#xff0c;欢迎进来讨论&#xff0c;博主今年没参加哈&#xff0c;大家聊聊&#xff0c;我听听大家的意见和看法哈 试题A:…...

thinkphp6 Driver [Think] not supported.

问题的原因&#xff1a;使用view这个类但相应的库未安装&#xff08;新版仅内置了PHP原生模板引擎&#xff09; 官方解释&#xff1a;视图功能由\think\View类配合视图驱动&#xff08;也即模板引擎驱动&#xff09;类一起完成&#xff0c;新版仅内置了PHP原生模板引擎&#x…...

爱自然生命力专项基金:“爱·启航”残障家庭教育援助项目帮扶上万残障家庭

为进一步积极践行社会责任&#xff0c;助力公益慈善事业&#xff0c;2017年2月爱自然生命力体系与中国下一代教育基金会开展相关合作&#xff0c;共同启动了中国下一代教育基金会爱自然生命力专项基金&#xff0c;并启动了基金第一个项目“爱启航残障家庭教育援助项目”&#x…...

【ubuntu】如何追加path

【背景】 在ubuntu上整备一个项目环境时需要追加Path。 【方法】 先复制下需要加的Path&#xff0c;比如我的是&#xff1a;/home/sheep431/.local/bin 加path命令 nano ~/.bashrc在nano界面输入如下命令 export PATH"/home/sheep431/.local/bin:$PATH"【检验】…...

用html写一个有趣的鬼魂动画

<!DOCTYPE html> <html lang"en" > <head><meta charset"UTF-8"><title>一个有趣的鬼魂动画</title><link rel"stylesheet" href"https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.m…...

【C++软件调试技术】C++软件开发维护过程中典型调试问题的解答与总结

目录 1、引发C软件异常的常见原因有哪些&#xff1f; 2、排查C软件异常的常用方法有哪些&#xff1f; 3、为什么要熟悉常见的异常内存地址&#xff1f; 4、调试时遇到调用IsBadReadPtr或者IsBadWritePtr引发的异常&#xff0c;该如何处理&#xff1f; 5、如何排查GDI对象泄…...

Pygame经典游戏:贪吃蛇

------------★Pygame系列教程★------------ Pygame经典游戏&#xff1a;贪吃蛇 Pygame教程01&#xff1a;初识pygame游戏模块 Pygame教程02&#xff1a;图片的加载缩放旋转显示操作 Pygame教程03&#xff1a;文本显示字体加载transform方法 Pygame教程04&#xff1a;dra…...

推荐一个免费使用Claude 3, GPT4和Gemini 1.5 Pro的网站

在探索人工智能的广阔天地时,我偶然间发现了You AI这一平台,它不仅更新了大量的模型,还慷慨地提供了免费的使用机会。兴奋之余,我迅速开始尝试这些新功能,并决定将我的体验分享给大家。以下是我试用的流程: 打开网站:点击左下角的Sign in蓝色框 https://you.comhttps://…...

An Investigation of Geographic Mapping Techniques for Internet Hosts(2001年)第二部分

​下载地址:An investigation of geographic mapping techniques for internet hosts | Proceedings of the 2001 conference on Applications, technologies, architectures, and protocols for computer communications 被引次数:766 Padmanabhan V N, Subramanian L. An i…...

解锁生成式 AI 的力量:a16z 提供的 16 个企业指南

企业构建和采购生成式AI方面的16项改变 生成式 AI 领域趋势洞察&#xff1a;企业构建和采购生成式 AI 的方式正在发生重大转变&#xff0c;具体表现在&#xff1a;* 专注于可信度和安全性&#xff1a;75% 的企业将信任和安全性视为关键因素。* 优先考虑可扩展性和灵活性&#x…...

C++初阶-list的底层

目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...

css实现圆环展示百分比,根据值动态展示所占比例

代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...

《Playwright:微软的自动化测试工具详解》

Playwright 简介:声明内容来自网络&#xff0c;将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具&#xff0c;支持 Chrome、Firefox、Safari 等主流浏览器&#xff0c;提供多语言 API&#xff08;Python、JavaScript、Java、.NET&#xff09;。它的特点包括&a…...

Objective-C常用命名规范总结

【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名&#xff08;Class Name)2.协议名&#xff08;Protocol Name)3.方法名&#xff08;Method Name)4.属性名&#xff08;Property Name&#xff09;5.局部变量/实例变量&#xff08;Local / Instance Variables&…...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战

在现代战争中&#xff0c;电磁频谱已成为继陆、海、空、天之后的 “第五维战场”&#xff0c;雷达作为电磁频谱领域的关键装备&#xff0c;其干扰与抗干扰能力的较量&#xff0c;直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器&#xff0c;凭借数字射…...

SpringCloudGateway 自定义局部过滤器

场景&#xff1a; 将所有请求转化为同一路径请求&#xff08;方便穿网配置&#xff09;在请求头内标识原来路径&#xff0c;然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...

Linux --进程控制

本文从以下五个方面来初步认识进程控制&#xff1a; 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程&#xff0c;创建出来的进程就是子进程&#xff0c;原来的进程为父进程。…...

2025季度云服务器排行榜

在全球云服务器市场&#xff0c;各厂商的排名和地位并非一成不变&#xff0c;而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势&#xff0c;对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析&#xff1a; 一、全球“三巨头”…...

GitHub 趋势日报 (2025年06月06日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...

tomcat指定使用的jdk版本

说明 有时候需要对tomcat配置指定的jdk版本号&#xff0c;此时&#xff0c;我们可以通过以下方式进行配置 设置方式 找到tomcat的bin目录中的setclasspath.bat。如果是linux系统则是setclasspath.sh set JAVA_HOMEC:\Program Files\Java\jdk8 set JRE_HOMEC:\Program Files…...