網站首頁 編程語言 正文
前言
一串字符串或者一串數字的去重操作往往困擾著我們,還有鞍點的計算,也是一個令人頭疼的問題,接下來,我將用標記法和數組的散列映射為大家剖析去重操作,以及鞍點的計算。
提示:以下是本篇文章正文內容,下面案例可供參考
一、數字和字符串去重
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的矩陣,從左上到右下稱為主斜線(傾角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; }
總結
提示:這里對文章進行總結:
例如:以上就是今天要講的內容,本文僅僅簡單介紹了pandas的使用,而pandas提供了大量能使我們快速便捷地處理數據的函數和方法。
原文鏈接:https://blog.csdn.net/qq_62662919/article/details/122189390
相關推薦
- 2022-12-10 Input系統之InputReader處理合成事件詳解_Android
- 2023-02-07 詳解C#如何實現窗體換膚_C#教程
- 2022-10-23 Android?AndFix熱修復原理詳情_Android
- 2022-10-14 使用docker起一個verdaccio的容器
- 2022-10-11 MATLAB中subplot函數的語法與使用實例_C 語言
- 2022-07-30 沒有匹配的倉庫可以修改:PowerTools
- 2022-02-09 C語言指針用法總結_C 語言
- 2022-03-12 使用VMware虛擬機安裝Linux(CentOS7鏡像)_Linux
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支