C++字符串和数字的去重操作和鞍点的寻找

 更新时间:2021年12月29日 16:10:13   作者:披星戴月的贾维斯  
大家好,本篇文章主要讲的是C++字符串和数字的去重操作和鞍点的寻找,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览

前言

一串字符串或者一串数字的去重操作往往困扰着我们,还有鞍点的计算,也是一个令人头疼的问题,接下来,我将用标记法和数组的散列映射为大家剖析去重操作,以及鞍点的计算。

提示:以下是本篇文章正文内容,下面案例可供参考

一、数字和字符串去重

1、标记法对数字去重

#include<stdio.h>
int 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、标记法对字符串去重

标记法对字符串进行去重操作
#include<string.h>
int 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散列映射对数字去重

#include<stdio.h>
int 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<stdio.h>
#include<string.h>
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)散列映射对字符串去重(更好理解的版本)

#include<stdio.h>
int 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º),在主斜线上最大,次斜线上最小的元素称为该矩阵的斜线鞍点。

#include<stdio.h>
int 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;
}

总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

到此这篇关于C++字符串和数字的去重操作和鞍点的寻找的文章就介绍到这了,更多相关C++去重和鞍点寻找内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 全面了解结构体、联合体和枚举类型

    全面了解结构体、联合体和枚举类型

    下面小编就为大家带来一篇全面了解结构体、联合体和枚举类型。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-07-07
  • C语言堆栈入门指南

    C语言堆栈入门指南

    我身边的一些编程的朋友以及在网上看帖遇到的朋友中有好多也说不清堆栈,所以我想有必要给大家分享一下我对堆栈的看法,有说的不对的地方请朋友们不吝赐教,这对于大家学习会有很大帮助
    2014-01-01
  • Visual Studio2000系列版本安装OpenGL的图文教程

    Visual Studio2000系列版本安装OpenGL的图文教程

    这篇文章主要介绍了Visual Studio2000系列版本安装OpenGL的图文教程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-04-04
  • VC++中HTControl的CHTButton按钮控件类用法实例解析

    VC++中HTControl的CHTButton按钮控件类用法实例解析

    这篇文章主要介绍了VC++中HTControl的CHTButton按钮控件类用法,对于大家进行VC++项目开发有一定的帮助作用,需要的朋友可以参考下
    2014-08-08
  • C语言打印正方形实例代码

    C语言打印正方形实例代码

    大家好,本篇文章主要讲的是C语言打印正方形实例代码,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • OpenCV实现轮廓的发现

    OpenCV实现轮廓的发现

    这篇文章主要为大家详细介绍了OpenCV如何实现轮廓的发现,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-05-05
  • VSCode C/C++多文件编译配置小结

    VSCode C/C++多文件编译配置小结

    本文主要介绍了VSCode C/C++多文件编译配置小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-08-08
  • 详解OpenMP的线程同步机制

    详解OpenMP的线程同步机制

    在本篇文章当中主要给大家介绍 OpenMP 当中线程的同步和互斥机制,在 OpenMP 当中主要有三种不同的线程之间的互斥方式。下面就来和大家来讨论一下OpenMP当中的互斥操作,需要的可以参考一下
    2023-01-01
  • C++17使用std::optional表示可能存在的值

    C++17使用std::optional表示可能存在的值

    本文主要介绍了C++17使用std::optional表示可能存在的值,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • C语言中二叉树的后序遍历详解

    C语言中二叉树的后序遍历详解

    大家好,本篇文章主要讲的是C语言中二叉树的后序遍历详解,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-01-01

最新评论