91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何進行C++字符串和數字的去重操作和鞍點的尋找

發布時間:2021-12-29 19:38:30 來源:億速云 閱讀:172 作者:柒染 欄目:開發技術

本篇文章給大家分享的是有關如何進行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;
}

去重之后的輸出:

如何進行C++字符串和數字的去重操作和鞍點的尋找 

 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;
}

二、鞍點的計算

如何進行C++字符串和數字的去重操作和鞍點的尋找

 什么是鞍點:有1個n×n的矩陣,從左上到右下稱為主斜線(傾角135o),從右上到左下稱為次斜線(傾角45o),在主斜線上最大,次斜線上最小的元素稱為該矩陣的斜線鞍點。

#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;
}

以上就是如何進行C++字符串和數字的去重操作和鞍點的尋找,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

c++
AI

义乌市| 吴旗县| 恩平市| 黄大仙区| 汝州市| 武山县| 建瓯市| 九江县| 沾化县| 宜都市| 灵石县| 乌什县| 万源市| 闻喜县| 札达县| 淳安县| 鲁甸县| 卢湾区| 肇庆市| 双柏县| 松江区| 新野县| 怀化市| 谢通门县| 游戏| 淮南市| 古田县| 丰城市| 织金县| 毕节市| 利津县| 盐山县| 永嘉县| 星子县| 河东区| 英吉沙县| 巴彦淖尔市| 长治县| 射洪县| 确山县| 靖江市|