/*
问题描述
123321是一个非常特殊的数,它从左边读和从右边读是一样的。
输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。
输入格式
输入一行,包含一个正整数n。
输出格式
按从小到大的顺序输出满足条件的整数,每个整数占一行。
样例输入
52
样例输出
899998
989989
998899
数据规模和约定
1<=n<=54。
*/
/*
1.针对此题:给定范围如何求解回文数?
待解决---
2.理论补充:第二节 解密回文--栈
栈的实现:一维数组和一个指向栈顶的top变量即可 (删除和插入操作)
回文字符串:XYYX XYZXY
判断是否为回文字符符串:程序见下
常用来验证括号匹配问题,图灵发明~
**************************************
1.读入字符串:
int s[101];
gets(s);
2.计算字符串数组的长度
#include<string.h>
strlen(arr);
3.语言商的规定:
保持操作数中精度最高的类型
5/2=2
5.0/2=2.5
4.循环注意 :
变量累加得次数
i=0 i<10 ;循环10次
i=0 i<=10;循环11次
不要随意在循环区域中改变循环变量的值
5.编写经验:模块测试精确到每一步得确定
6.适当位置加break减少循环次数
7.++top
==
top++
top--
8.中英文转换:
((
(( 中文字符占两个单位
*/
#include<stdio.h>
#include<string.h>
int main(){
char arr[101];//字符串数组
char s[101];//栈
int mid;
int i;
int top=0;//栈指针
//录入字符串
gets(arr);//scanf("%s",&s);
//计算中点:
mid = strlen(arr)/2 ;
//printf("%d=====================%d",strlen(arr),mid);
//前一半字符串压入栈中
for(i=0;i<mid;i++){
s[++top]=arr[i];//栈top值从1开始 妙处*******************************************************
//如果使用后增,那么top永远指向下一个空元素 再下次使用时必须先减回来,蹩脚操作
//top++;
printf("\ni=%d top=%d\n",i,top);
}
//top--;//操作蹩脚
//判断字符串
for(i=mid;i<strlen(arr);i++){
if(strlen(arr)%2!=0&&i==mid){
i=i+1;
}
printf("\nmid = %d\n arr[%d]=%c s[%d]=%c \n",mid,i,arr[i],top,s[top]);
/* if(arr[i]==s[top]){
top--;
}*/
//妙处2:使用break减少循环次数;
if(arr[i]!=s[top]){
break;
}
top--;
}
//top++;//操作蹩脚
printf("top = %d (==0)",top);
if(top==0){
printf("\n是回文字符串!\n");
}else{
printf("\n不是回文字符串!\n");
}
return 0;
/*
回文数的思想简单
妙处是的是判断使用栈的top指针始终指向上一个栈顶空位置
for(i=0;i<mid;i++){
s[++top]=arr[i];//栈top值从1开始 妙处*******************************************************
//如果使用后增,那么top永远指向下一个空元素 再下次使用时必须先减回来,蹩脚操作
//top++;
printf("\ni=%d top=%d\n",i,top);
}
//top--;//操作蹩脚
*/
}
C语言之堆栈---回文数
最新推荐文章于 2022-06-24 21:34:48 发布