如何进行C++字符串和数字的去重操作和鞍点的寻找
发表于:2024-10-09 作者:千家信息网编辑
千家信息网最后更新 2024年10月09日,本篇文章给大家分享的是有关如何进行C++字符串和数字的去重操作和鞍点的寻找,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。前言一串字符串或
千家信息网最后更新 2024年10月09日如何进行C++字符串和数字的去重操作和鞍点的寻找
本篇文章给大家分享的是有关如何进行C++字符串和数字的去重操作和鞍点的寻找,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
前言
一串字符串或者一串数字的去重操作往往困扰着我们,还有鞍点的计算,也是一个令人头疼的问题,接下来,我将用标记法和数组的散列映射为大家剖析去重操作,以及鞍点的计算。
一、数字和字符串去重
1、标记法对数字去重
#includeint main(){ int n, i, j, flag = 1;//先将flag置一 int a[1000]; scanf("%d", &n); for (i = 0; i < n; i++)//写一个for循环读入数据 { scanf("%d", &a[i]); for (j = 0; j < i; j++) { if (a[i] == a[j]) { flag = 0; break; } } if (flag) printf("%d ", a[i]); flag = 1;//标记的flag重新置1,循环再次继续。 } return 0;}
2、标记法对字符串去重
标记法对字符串进行去重操作#includeint main(){ int i, j, flag=1; char s[1000]; gets(s);//直接读入字符串,包括空格 for (i = 0; i < strlen(s); i++)//直接用strlen计算输入的字符串的长度 { for (j = 0; j < i; j++) { if (s[i] == s[j])//如果有相同字符,则将标记置0,并跳出循环 { flag = 0; break; } } if (flag) printf("%c", s[i]);//因为是每个字符输出,所以是%c flag = 1; } return 0;}
去重之后的输出:
3散列映射对数字去重
#includeint main(){ int n; int a[1000], b[6000] = { 0 };//定义两个数组,第二个数组要开得比第一个数组大一些; scanf("%d", &n); for (int i = 0; i < n; i++) scanf("%d", &a[i]); for (int i = 0; i < n; i++) { b[a[i]]++;//将数组a的数当作数组b的下标,将数组b中a数组作下标的数都变1; if (b[a[i]] > 1) a[i] = -1;//若该数重复被遇到,则再加,所以但b[a[i]]>1时,说明已经遇到过一次了 } for (int i = 0; i < n; i++) if (a[i] != -1) printf("%d ", a[i]); return 0;}
4、(1)散列映射对字符串去重
#include#include int main(){ int i, j=0; char a[1000], b[6000] = { 0 }; gets(a);//直接读入字符串,包括空格 for (i = 0; i < strlen(a); i++)//直接用strlen计算输入的字符串的长度 { b[a[i]]++; if (b[a[i]] > 1) a[i] = -1; //若该数重复被遇到,则再加,所以但b[a[i]] > 1时,说明已经遇到过一次了 } for (i = 0; i < strlen(a); i++) { if(a[i] !=-1) printf("%c", a[i]); } return 0;}
(2)散列映射对字符串去重(更好理解的版本)
#includeint main(){ char s1[400],s2[400]; int a = 0,b=0; int arr[300] = {0}; gets(s1); for (int i = 0; s1[i]; i++) a++;//计算s1的元素个数 for (int i = a; i >=0; i--) { arr[s1[i]]++;将s1的数组内的元素当下标 if (arr[s1[i]] == 1)//如果arr数组的元素=1,则将s1的元素存到s2 { s2[b] = s1[i]; b++;计算数组s2的个数 } } for (int i = b - 1; i >= 0; i--) printf("%c", s2[i]); return 0;}
二、鞍点的计算
什么是鞍点:有1个n×n的矩阵,从左上到右下称为主斜线(倾角135º),从右上到左下称为次斜线(倾角45º),在主斜线上最大,次斜线上最小的元素称为该矩阵的斜线鞍点。
#includeint a[100][100];int main(){ int p[200], q[200];//p主大,q主小 int n, i, m,j,s; scanf("%d", &n); for (i = 0; i < n; i++) for (j = 0; j < n; j++) scanf("%d", &a[i][j]); for (i = 0; i < 2 * n - 1; i++)//线条数 { p[i] = 0x80000000;//最小整数 q[i] = 0x7fffffff;//最大整数 } for (i = 0; i < n; i++) for (j = 0; j < n; j++) { if (a[i][j] > p[n + i - j - 1]) p[n + i - j - 1] = a[i][j];//找主斜线的最大值 if (a[i][j] < q[i + j]) q[i + j] = a[i][j];//找次斜线最小值 } s = 0; for (i = 0; i < n; i++) { for (j = 0; j < n; j++) { if (a[i][j] == p[n + i - j - 1] && a[i][j] == q[i + j]) s += a[i][j]; } }printf("%d", s); return 0;}
以上就是如何进行C++字符串和数字的去重操作和鞍点的寻找,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。
字符
字符串
斜线
数字
数组
标记
元素
j++
最大
最小
个数
循环
C++
倾角
整数
更多
知识
矩阵
空格
篇文章
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
数据库学号怎么编
游戏服务器引擎有哪些
数据库课程设计课程思政
服务器基础教程
出版社期刊数据库关系
加强网络安全综合治理 构筑
宝泉软件开发
网络安全教育3分钟演讲稿
华为怎么关闭云服务器
网络服务器设定
sql查看前100个数据库
玩中国服务器都能叫国服吗
软件开发安卓培训学校
盛大ro服务器
软件开发平台层接口层业务层
2019网络技术在汽车上的运用
对网络安全构成威胁的因素
刀剑无双通过数据库修改充值
方舟生存啥服务器好玩
网络安全专家李永乐讲课视频
win7打印服务器有什么用
英文网络安全翻译
网络安全综合防护
数据库建立技术
服务器部署公有云
贵州酒店服务器不可用
网络安全林书豪
怎样给app配置虚拟服务器
网络安全是我们的重要职责
达内学软件开发怎样