判断回文数算法
来源:学生作业帮助网 编辑:作业帮 时间:2024/09/25 05:31:57 字数作文
篇一:数据结构与算法问题分析及源代码之求回文数判断
求字符串是否为回文数
1 题目
编写一个程序,输入一个字符串,判断该字符串是否“回文”
2 目标
熟悉编译环境,练习将数据结构知识融入程序中,用结构的眼光看数据。
3 设计思想及算法描述
从键盘输入一个数,判断其是否为回文数,并显示。用数组存储数字符串,利用递归算法从两头开始逐个比较,若出现不等,退出并输出“不是回文”,否则输出“是回文”。 4 程序流程图
5 源程序
#include "stdafx.h"
#include "stdio.h"
#include
int test(char *s,int bg,int ed) {
if(s[bg]!=s[ed])return 0;
else if(ed-bg>2)test(s,bg+1,ed-1); return 1;
}
int main(int argc, int* argv[]) {
char s[50];
gets(s);
if(test(s,0,strlen(s)-1)) cout<<"是回文"< } 篇二:回文数判断程序 回文数判断程序 说明:此程序可以对输入的字符串是否属于对称字符串进行有效的判断,因此只要是关于对称字符串的判断此程序都可以胜任,用于回文数判断只是该程序的一个子功能而已。 1,UI如下 由文本框TextBox1和按钮Button1组成 2,用到的函数(可直接复制粘帖,然后在自己的后台代码中调用) '判断回文数 Public Function isHWS(ByVal s As String) As String Dim s1 As String = "" Dim s2 As String = "" Dim i As Integer = 0 Dim p As Integer = 0 If isJiOu(s.Length) = 1 Then p = (s.Length + 1) / 2 s1 = Mid(s, 1, p) Else p = s.Length / 2 + 1 s1 = Mid(s, 1, p - 1) End If For i = s.Length To p Step -1 s2 = s2 + Mid(s, i, 1) Next If s1 = s2 Then Return "是回文数" Else Return "不是回文数" End If End Function '判断一个整数的奇偶 Public Function isJiOu(ByVal i As Integer) As Integer If i Mod 2 = 0 Then Return 2 Else Return 1 End If End Function 3,后台代码如下 '判断按钮的Click事件 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles Button1.Click Select Case TextBox1.Text.Length Case 0 Button1.Content = "请输入" Case 1 Button1.Content = "是回文数" Case Else Button1.Content = isHWS(TextBox1.Text) End Select End Sub '判断按钮失去焦点事件 Private Sub Button1_LostFocus(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles Button1.LostFocus Button1.Content = "判断" End Sub 4,运行效果 篇三:判断是否是回文数 【实验报告】撰写 实验编号: 实验学期: 姓名: 任课老师: 课程名称: 课程编号: 学时: 班级: 学号: 实验时间: 实验题目: 实验 目的和要求 实验内容与分析设计 实验步骤与调试过程 实验结果 疑难小结 主要算法和程序清单 相关资料 请上传20M以内的rar或zip文件 上 传: 篇四:java判断一个数位数及是否是回文数 /* * 4.回文数。 编写一个Java应用程序。用户从键盘输入一个1—9999之间的数,程序将判断这个数是 回文数是指将该数含有的数字逆序排列后得到的数和原数相同,例如12121、3223都是 几位数,并判断这个数是否是回文数。 回文数。 */ public class JudgeHuiWen { public static void main(String[] args) { Scanner sc=new Scanner(System.in); for(int i=0;i<10000;i++){ System.out.print("请输入一个1-9999之间的数:"); int a=sc.nextInt(); if(a<1||a>9999){ } else{ if(a/1000!=0){ System.out.print("这个数是四位数,"); int m=a/1000;int j=a%1000/100; int k=a%1000%100/10;int if((1000*n+100*k+10*j+m)==a){ } System.out.print("这个数是三位数,"); int m=a/100;int j=a%100/10;int k=a%100%10; if((100*k+10*j+m)==a){ } System.out.print("这个数是两位数,"); int m=a/10;int j=a%10; if((10*j+m)==a){ System.out.println("而且是个回文数"); }else{ System.out.println("而且是个回文数"); System.out.println("但是不是回文数"); }else{ System.out.println("而且是个回文数"); System.out.println("但是不是回文数"); }else{ System.out.println("你输入的数有误,请重新输入!"); n=a%1000%100%10; }else if(a/100!=0){ }else if(a/10!=0){ }} }} } } System.out.println("但是不是回文数"); }else{ System.out.print("这个数是一位数,"); System.out.println("而且是个回文数"); 这个判断一个数是否是回文数的通用方法,有点繁琐了,跪求回文数的简单算法!!联系我QQ291757635,小弟跪谢了! 篇五:算法(各种数的判断) 算法:同构数、素数、回文数(对称数)、奇数、偶数、最小公倍数、最大公约数 一、同构数 1)概念:如果一个数出现在它的平方数的右端,则这个数我们称作是“同构数” 。如:225=25 25=625 2)求解方法:字符串截取。 算法如下: Dim x%,y% X=abs(inputbox(“请输入一个正整数:”)) Y=x*x ‘把X的平方数存入变量Y中 N=len(str(x))-1 If x=val(right(str(y),n) then print x & “是同构数” else print x & “不是同构数” end if 能力训练: 案例1:设计程序实现:找出1~2000范围内的所有同构数 案例2:设计程序实现:利用随机函数产生200个1000以内的正整数,并统其中有几个是同构数。 二、素数(即质数) 概念:只能被1和它本身整除的数。也就是说,除了1和它本身,再不能被任何数整除的数,就是素数。 Dim x as integer X=abs(inputbox(“请输入一个正整数:”)) F=true ‘假设X是素数 For k=2 to x-1 If x mod k=0 then F=false ‘X不是素数 Exit for ‘退出循环 Next k If f=true then print x & “是素数” else print x & “不是素数” 能力训练: 1、 输出100以内的所有素数,且要求按每行10个数输出。 2、 利用随机函数产生50个[100,500]之间的正整数放入list1中,找出其中的素数放入到list2 中,并统计素数的个数在label1中显示出来。 三、回文与对称数 概念:顺读与倒读都一样的字符串,我们称之为“回文”;顺读与倒读都一样的数,我们称之为“对称数”。如:12321 就是一个对称数,“上海自来水来自海上” 是一个回文。 基本算法: X$=”上海自来水来自海上” N=len(x$) i=1:j=n f=true ‘假设f=true表示X$是回文件 do until r>=j R$=mid(x$,I,1) : L$=mid(x$,j,1) If R$<>L$ then f=false :exit do I=i+1 : j=j-1 Loop If f then print X$ & “是回文件” else print X$ & “不是回文件” 能力训练: 设计程序实现:判断一个正整数是否为对称数? 四、求两个正整数的最大公约数 1)概念:两个数的公共约数中,最大的一个约数即为两数的最大公约数。 2)求解方法:辗转相除法。即用两数中最大的一个数当作被除数,小的一个数当作除数,两数除求得余数R,如果余数R=0,那么此时的除数即为两数的最大公约数;如果余数R不为0,则把除数当作被除数,余数当作除数,重新求得两数相除的余数R,只要余数R不为0,一直这样辗转相除下去,直到余数R=0为止。 算法如下: Dim x%,y% X=abs(inputbox(“请输入一个正整数:”)) y=abs(inputbox(“请输入一个正整数:”)) M=x*y ‘把原始两个正整数的乘积保存下来 if x R=x mod y Do until R=0 X=y ‘把除数Y当作被除数 Y=r ‘把余数R当作除数 R=x mod y ‘求得两数相除的余数R loop print “最大公约数=” & y print “最小公倍数=” & M/y rem最小公倍数=两个正整数的乘积/最大公约数 五、阿姆斯特朗数(自恋数) 概念:判断一个正整数是否为阿姆斯特朗数的标准是:如果一个数每位数字的立方之和等于这个数本身,即该数称为阿姆斯特朗数。如:153=1*1*1+5*5*5+3*3*3 Dim x as integer X=abs(inputbox(“请输入一个正整数:”)) S=0 ‘S用来保存各位数字立方之和 Do until x=0 R=x mod 10 ‘把最低位数字分离出来放到R中 S=S+R*R*R X=X\10 ‘把X缩小10倍后取整 Loop If S=X then print x & “是自恋数” else print x & “不是自恋数” 六、水仙花数(求解方法同自恋数,此处略) 概念:水仙花数是一个三位正整数。如果这个三位正整数各位数字的立方之和等于这个三位数本身,则这个三位数我们称之为“水仙花数”。 巩固练习: 1、设计程序实现:随机产生两个100以内的正整数,然后输出两数的最大公约数和最小公倍数。 2、设计程序实现:找出[1,2000]之内的所有的自恋数。 3、设计程序实现:输出所有的水仙花数。 4、设计程序实现:利用随机函数随机产生300个10000以内的正整数,并统计共出现了多少个自恋数。