C語言好好題(一維數組)

兩天沒有更新了,貼紙們,有沒有想我呀。😄😄😄

好了,就寒暄到這里吧,下面請看題:

有序序列判斷

輸入一個整數序列,判斷是否是有序序列,有序,指序列中的整數從小到大排序或者從大到小排序(相同元素也視為有序

輸入描述:

第一行輸入一個整數N(3≤N≤50)。

第二行輸入N個整數,用空格分隔N個整數。

輸出描述:

輸出為一行,如果序列有序輸出sorted,否則輸出unsorted。

判斷是否為有序序列,可能是升序還可能是降序,所以我們就可以設計一個函數來判斷是不是有序序列,那么我們怎么實現呢?首先我們假設是升序的,那么我們就以這個條件進去,然后以某一個值為有序狀態,然后我們再里面進行判斷,如果有相反情況,那么我們就改變剛才假設有序狀態的值,改為無序狀態。之后我們再在主函數中,根據返回的值進行判斷有序還是無序!:

int sort(int arr[], int n)
{if (arr[0] >= arr[1]){int flag = 0;//假設flag為0的時候為有序狀態for (int j = 0; j < n - 1; j++){if (arr[j] < arr[j + 1]){flag = 1;//因為我們前面假設的是升序,這里前一位大于后一位的話,就不是有序                //  狀態了,那么此時我們就變為無序狀態}}return flag;}else {int flag = 0;for (int j = 0; j < n - 1; j++){if (arr[j] > arr[j + 1]){flag = 1;}}return flag;}
}

主函數里,我們就很好寫了:

int sort(int arr[], int n)
{if (arr[0] >= arr[1]){int flag = 0;for (int j = 0; j < n - 1; j++){if (arr[j] < arr[j + 1]){flag = 1;}}return flag;}else {int flag = 0;for (int j = 0; j < n - 1; j++){if (arr[j] > arr[j + 1]){flag = 1;}}return flag;}
}int main()
{int n = 0;scanf("%d", &n);int arr[50];for (int i = 0; i < n; i++){scanf("%d",&arr[i]);}int ret = sort(arr, n);//根據返回的值進行判斷是否有序if (ret == 1){printf("unsorted");}else{printf("sorted");}return 0;
}

我們來看看運行結果:


有序序列插入一個整數

有一個有序數字序列,從小到大排序,將一個新輸入的數插入到序列中,保證插入新數后,序列仍然是升序。

輸入描述:

第一行輸入一個整數N(0≤N≤50)。

第二行輸入N個升序排列的整數,輸入用空格分隔的N個整數。

第三行輸入想要進行插入的一個整數。

輸出描述:

輸出為一行,N+1個有序排列的整數。

插入一個數到升序序列中,而且保證插入后還是一個升序序列!怎么想這道題呢?這里的要求是插入一個數,那么我們一個數有一個數的做法,有一些是兩個有序序列進行排序!那么我們很容易想到用這個數字與這個序列進行比較,如果小于這個數,那么我們就打印我們的原序列的數,如果大于我們這個數,那我們此時就是打印我們的目標數,那么現在我們就以這個思路去實現我們的代碼:

int main()
{int n = 0;scanf("%d", &n);int arr[50];for (int i = 0; i < n; i++){scanf("%d", &arr[i]);}int num = 0;scanf("%d", &num);for (int i = 0; i < n; i++){if (arr[i] < num){printf("%d ", arr[i]);}else{printf("%d ", num);}	}return 0;
}

此時我們來看看運行的結果:

?我們根據運行的結果可以看出,當我們找到插入數的位置后,我們之后的數都是打印的是我們的插入的那個數。那么此時我們可以想,那當我們的插入數插到屬于它自己的位置時,此時我們就不回去循環了。我們可以重新寫一個循環呀,打印原序列后面的數不就好了嘛,我們打印完后,我們就跳出整個循環!:

int main()
{int n = 0;scanf("%d", &n);int arr[50];for (int i = 0; i < n; i++){scanf("%d", &arr[i]);}int num = 0;scanf("%d", &num);for (int i = 0; i < n + 1; i++)//因為我們插入了一個數,所以多了一次循環{if (arr[i] < num){printf("%d ", arr[i]);}else{printf("%d ", num);//因為是插入一個,所以我們就打印之后的序列的數就好了。for (int j = i; j < n; j++){printf("%d ", arr[j]);}break;//打印完后跳出整個循環就over了!}}return 0;
}

?我們來看看此時的運行結果:


序列中刪除指定數字

有一個整數序列(可能有重復的整數),現刪除指定的某一個整數,輸出刪除指定數字之后的序列,序列中未被刪除數字的前后位置沒有發生改變。

輸入描述:

第一行輸入一個整數(0≤N≤50)。

第二行輸入N個整數,輸入用空格分隔的N個整數。

第三行輸入想要進行刪除的一個整數。

輸出描述:

輸出為一行,刪除指定數字之后的序列。

序列中刪除指定的數字,而且可能序列中有相同的整數,那么也可能是相鄰的相同的數。那么我們還是要與序列中的數進行比較,如果不相同的話,那么我們就打印出序列中的數。如果相同的話,我們就刪除序列中的數:

int main()
{int n = 0;scanf("%d", &n);int arr[50];for (int i = 0; i < n; i++){scanf("%d", &arr[i]);}int num = 0;scanf("%d", &num);for (int i = 0; i < n; i++){if (arr[i] > num || arr[i]<num){printf("%d ", arr[i]);}	else{}}return 0;
}

此時我們的問題是怎樣刪除我們的數,那我們可以由后面一位數來替代該位需要刪除的數:

arr[i] = arr[i + 1];

而且還要注意可能有相鄰的相同的數!那么我們在序列中的數與該數相同時我們是不是還應該弄一個循環,判斷是否有相鄰的相同數,直到不相等了,我們才跳出去!

while (arr[i] == arr[i + 1])
{arr[i] = arr[i + 1];i++;
}

我們來看看整體的代碼:

int main()
{int n = 0;scanf("%d", &n);int arr[50];for (int i = 0; i < n; i++){scanf("%d", &arr[i]);}int num = 0;scanf("%d", &num);for (int i = 0; i < n; i++){if (arr[i] > num || arr[i]<num){printf("%d ", arr[i]);}	else{while (arr[i] == arr[i + 1]){arr[i] = arr[i + 1];i++;}}}return 0;
}

我們來看看運行的結果:

?我們來梳理一下該過程:假設序列不等于要刪除的數,我們就直接打印該序列中的數就可以了,如果等于該序列的數,我們先判斷有沒有相鄰的相同的數,如果沒有,那么我們就不用執行,這一位就不用打印,就直接跳到上面for循環給i++,跳到下一位進行判斷!如果有相鄰相同的,我們就進入while循環,把后一位的值賦值給前一位,然后i++,直到不相等為止!假設我們有兩位相鄰的,那么我們的while循環就執行了一次,i就加了一次,然后到上面for循環處還要加一次,總共加了我們的兩次,就是跳過我們的這兩位咯,你懂了嗎?學會了?還是學廢了?哈哈,如果還是不太懂的話,可以自己去調試哦!


序列中整數去重

輸入n個整數的序列,要求對這個序列進行去重操作。所謂去重,是指對這個序列中每個重復出現的整數,只保留該數第一次出現的位置,刪除其余位置。

輸入描述:

輸入包含兩行,第一行包含一個正整數n(1 ≤ n ≤ 1000),表示第二行序列中數字的個數;第二行包含n個整數(范圍1~5000),用空格分隔。

輸入描述:

輸出為一行,按照輸入的順序輸出去重之后的數字,用空格分隔。

序列中整數的去重,且保留該數第一次出現的位置。哇,這題是一道比一道變態啊!😵😵😵

既然序列中的每一個元素都要去看的話,那么我們就拿出第一位去和后面的每一位進行比較,看看后面有沒有,如果有那么我們就刪除或者向上面那樣的跳過,第一位比較完后,我們接著要拿出第二位去與后面的進行比較了,既然怎樣的話,那么我們還是可以寫出下面的代碼的:

int main()
{int n = 0;scanf("%d", &n);int arr[1000];for (int i = 0; i < n; i++){scanf("%d", &arr[i]);}for (int i = 0; i < n; i++){for (int j = i+1; j < n; j++){if (arr[i] == arr[j]){//待思考的內容}}}return 0;
}

既然它要刪除的話,那就是我們的跳過或者移位,如果跳過的話,那么我們再雙重循環里面又該怎樣打印?那么我們就先選擇一位看看,把后面的那一位移到這一位來,就把后面的整體像前面移一位。移動完后,我們再接著從后面一位進行排查,如果還有我們又接著移,直到排查完畢!這個思路好像可以勒哈。那么我們移動一整次,是不是我們的n就要減少一次呢,因為我們移動了之后就會減少一位嘛,所以n應該減減。但是我們此時還要注意一個問題,我們的j也應該減減,因為再我們下一次判斷下一位時,是從刪除那位的位置開始排查著走的,因為我們到上面for循環去的話,j還要加加,所以我們這里j還要減減!

int main()
{int n = 0;scanf("%d", &n);int arr[1000];for (int i = 0; i < n; i++){scanf("%d", &arr[i]);}for (int i = 0; i < n; i++){for (int j = i+1; j < n; j++){if (arr[i] == arr[j]){for (int a = j; a < n - 1; a++){arr[a] = arr[a + 1];}n--;j--;}}}for (int i = 0; i < n; i++){printf("%d ", arr[i]);}return 0;
}

我們來看看運行結果:

?今天就到這里了,拜拜了,好夢!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/160215.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/160215.shtml
英文地址,請注明出處:http://en.pswp.cn/news/160215.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

騰訊云輕量4核8G12M帶寬服務器租用價格和S5實例報價

騰訊云4核8G服務器優惠價格表&#xff0c;云服務器CVM標準型S5實例4核8G配置價格15個月1437.3元&#xff0c;5年6490.44元&#xff0c;輕量應用服務器4核8G12M帶寬一年446元、529元15個月&#xff0c;阿騰云atengyun.com分享騰訊云4核8G服務器詳細配置、優惠價格及限制條件&…

C++(模板進階)

目錄 前言&#xff1a; 本章學習目標&#xff1a; 1.非類型模版參數 1.1使用方法 1.2注意事項 1.3 實際引用 2.模版特化 2.1概念 2.2函數模板特化 2.3類模板特化 2.3.1全特化 2.3.2偏特化 3.模版分離編譯 ?編輯 3.1失敗原因 ?編輯 3.2解決方案 4 總結 前言&…

【C++】類和對象——構造函數和析構函數

今天要學習兩個特殊的函數&#xff0c;分別是構造函數和析構函數&#xff0c;它們究竟有什么用呢&#xff1f; 比如說&#xff0c;我們先寫一個簡單的日期的類 class Date { public:void Init() {_year 1;_month 1;_day 1;}void Print() {cout << _year << &qu…

Sentinel 分布式系統

Sentinel 是一種分布式系統的流量防衛兵和熔斷器&#xff0c;由阿里巴巴開發并開源。它的主要目標是保護分布式系統中的穩定性和可用性&#xff0c;防止因高并發或異常流量而導致的系統崩潰。下面是 Sentinel 的原理和使用教程的概要&#xff1a; Sentinel 的原理&#xff1a;…

如何去開發一個springboot starter

如何去開發一個springboot starter 我們在平時用 Java 開發的時候&#xff0c;在 pom.xml 文件中引入一個依賴就可以很方便的使用了&#xff0c;但是你們知道這是如何實現的嗎。 現在我們就來解決這一個問題&#xff01; 創建 SpringBoot 項目 首先我們要做的就是把你想要給別…

css3

基礎 <!DOCTYPE html> <html><head><meta charset"utf-8"><title>style</title><!-- link&#xff08;外部樣式&#xff09;和style&#xff08;內部樣式&#xff09;優先級相同&#xff0c;重復寫會覆蓋 --><link re…

面試題-9

1.如何封裝一個組件 1.使用Vue.extend()創建一個組件 2.使用Vue.components()方法注冊組件 3.如果子組件需要數據,可以在props中接收定義 4.子組件修改好數據,要把數據傳遞給父組件&#xff0c;可以用emit()方法 原則: 把功能拆開 盡量讓組件原子化,一個組件做一件事情 …

centos7安裝MySQL—以MySQL5.7.30為例

centos7安裝MySQL—以MySQL5.7.30為例 本文以MySQL5.7.30為例。 官網下載 進入MySQL官網&#xff1a;https://www.mysql.com/ 點擊DOWNLOADS 點擊鏈接&#xff1b; 點擊如上鏈接&#xff1a; 選擇對應版本&#xff1a; 點擊下載。 安裝 將下載后的安裝包上傳到/usr/local下…

CTF靶場搭建及Web賽題制作與終端docker環境部署

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 寫在前面 ╔═══════════════════════════════════════════════════…

使用ChatGPT創建Makefile構建系統:使用Make運行Docker

使用ChatGPT創建Makefile構建系統&#xff1a;使用Make運行Docker 芯語芯愿&#xff08;知乎/紛傳/CSDN/&#xff09;&#xff1b;小石頭的芯語芯愿&#xff08;微信公眾號&#xff09; 開發高效現代的構建系統對于滿足開發周期需求至關重要。原先&#xff0c;嵌入式開發者一…

Unity 場景烘培 ——LensFlare鏡頭光暈(三)

提示&#xff1a;文章有錯誤的地方&#xff0c;還望諸位大神指出&#xff01; 文章目錄 前言一、鏡頭光暈 (Lens Flares)是什么&#xff1f;二、使用Lens Flares組件總結 前言 一般情況下都會忽略的東西&#xff0c;鏡頭光暈。理論上不加鏡頭光暈&#xff0c;也不會有什么影響…

vue3的兩個提示[Vue warn]: 關于組件渲染和函數外部使用

1. [Vue warn]: inject() can only be used inside setup() or functional components. 這個消息是提示我們&#xff0c;需要將引入的方法作為一個變量使用。以vue-store為例&#xff0c;如果我們按照如下的方式使用&#xff1a; import UseUserStore from ../../store/module…

數據治理之考評環節

考評的流程&#xff08;批處理&#xff09; 周期調度&#xff0c;每天一次&#xff1a;采集hive, hdfs元數據存放到mysql中的dga庫的metainfo表手動通過管理頁面補充輔助信息指標考評 讀取要考評的表的元數據及輔助信息讀取要考評的指標對每張表的每個指標逐個進行考評保存考評…

RabbitMQ快速入門(簡單收發消息)

文章目錄 前言一、數據隔離1.用戶管理2.virtual host 二、控制臺收發1.交換機2.隊列3.綁定 三、編程式收發1.依賴和配置2.收發信息 總結 前言 1.了解數據隔離 2.RabbitMQ控制臺收發信息 3.SpringBoot整合RabbitMQ收發信息 一、數據隔離 1.用戶管理 點擊Admin選項卡&#xff0…

mmdet全教程

官方給的文檔一言難盡&#xff0c;網上的教程又沒有從大綱到源碼的完整解讀&#xff0c;計劃年后開個系列記錄一下

依賴庫:Ceres-solver-2.0.0安裝

依賴庫&#xff1a;Ceres-solver-2.0.0安裝 前言安裝ceres-solver-2.0.0驗證 前言 Ceres Solver是谷歌開源的C非線性優化庫&#xff0c;能夠解決有約束或無約束條件下的非線性最小二乘問題。2010年之后大量的運用在谷歌的產品開發中&#xff0c;尤其在谷歌開源的cartographer中…

圖像分類單張圖片預測準確率達到百分之百

在圖像分類任務中&#xff0c;針對單個圖片得到100%的準確率是有可能但極其罕見的&#xff0c;并且不代表模型在整個測試集上也能達到100%的準確率。 ??針對單個圖片獲得100%準確率的情況可能包括以下幾種情形&#xff1a; 圖片本身特殊性: 如果測試集中的某張圖片在訓練集中…

【python基礎(1)】變量和簡單數據類型

文章目錄 一. 變量的命名和使用二. 字符串1. 修改字符串的大小寫2. 在字符串中使用變量3. 使用制表符或換行符來添加空白4. 刪除空白 三. 數1. 整數2. 浮點數3. 整數和浮點數4. 數中的下劃線5. 同時給多個變量賦值6. 常量 三. 注釋四. Python之禪 一. 變量的命名和使用 變量規…