用迴圈隊列解決舞伴配對問題發現自己的問題

来源:https://www.cnblogs.com/hjt2ZhaoYing/archive/2019/11/08/11817240.html
-Advertisement-
Play Games

1.首先是對vs2017這款軟體的使用 1.VS中的scanf()這個函數的使用問題 直到這次寫代碼我才知道VS中用scanf是會被警告的,VS中正規的類似於scanf()函數的輸入函數是scanf_s()只有使用這個函數你才不會報錯,它有三個參分別是數據類型,地址,最大存儲量, 還有兩種方法 第一 ...


1.首先是對vs2017這款軟體的使用

1.VS中的scanf()這個函數的使用問題

  直到這次寫代碼我才知道VS中用scanf是會被警告的,VS中正規的類似於scanf()函數的輸入函數是scanf_s()只有使用這個函數你才不會報錯,它有三個參分別是數據類型,地址,最大存儲量,

  還有兩種方法

  1.   第一在代碼的第一行加上“#define _CRT_SECURE_NO_WARNINGS”。

   2.         或者修改文件屬性也可以做到和上面一樣的效果

   右鍵點擊源文件,

       

 

 

   點擊屬性

  

 

依次選中:C/C++ >> 預處理器,在右側預處理器定義右側添加上:_CRT_SECURE_NO_DEPRECATE

 2.第二就是我的知識了,真的好菜

  1. while()括弧中的是迴圈條件,而不是停止條件,請一定要想好迴圈條件是啥
  2. 我本來以為%s輸入有一個特點就是遇到空格就停止,其實這是函數scanf()函數的特點而不是%s的特點,如果想把空格也吞了,那就用gets(),還有兩個函數就是getchar()和getch()
  3. 還有就是寫代碼的習慣很不好,總是思路混亂,不知道接下來幹啥,其實應該,想著寫著,就像翻譯一樣,把你的想法,思路,用代碼翻譯下來
  4. 對演算法原理思想理解的不夠,不重視思想原理,迴圈列表的原理最重要的就兩個(front + 1)% maxsize 和   (rear + 1) % maxsize,我感覺
  5. 只是太薄弱,尤其是在數組的形參表那裡,要去補補了,傳遞的是一個地址,怎麼寫才好,是 status inqueue(queue all[],&man)還是 status inqueue(queue all,&man)呢?我不是很清楚,最後我用了前者對了,但我不知道為啥
  6. void inqueue(person all[], queue &man, queue &woman,int n) {//根據性別分別如男隊和女隊
        for (int i = 0; i < n; i++) {
            if (all[i].sex == 1) {
                //strcpy(man.elem[man.number], all[i].name);
                strcpy(man.elem[man.rear], all[i].name);
                man.rear = (man.rear + 1) % 100;
                man.number++;
            }
            else {
                //strcpy(woman.elem[woman.number], all[i].name);
                strcpy(woman.elem[woman.rear], all[i].name);
                woman.rear = (woman.rear + 1) % 100;
                woman.number++;
            }
        }
    }

    下麵就是我這次寫的代碼,很low,很菜,哎,我太菜了。

  7. #define _CRT_SECURE_NO_WARNINGS
    #include<stdio.h>
    #include<string.h>
    #include<iostream>
    #include<malloc.h>
    #include<math.h>
    #include<windows.h>
    using namespace std;
    
    typedef int status;
    
    int n;
    typedef struct {
        char name[20];
        int sex;
    }person;
    
    typedef struct {
        int front;
        int rear;
        char elem[100][20];
        int number;//人的數量
    }queue;
    
    void inperson(person &all) {
        cout << "請輸這位同學的姓名和性別:";
        scanf("%s", all.name);//在c和c++語言中輸入字元串向字元數組中是不需要加&的,
        /*輸入參數是已經定義好的“字元數組名”, 不用加&, 因為在C語言中數組名就代表該數組的起始地址*/
        //cout << "請輸入這位同學的性別:";
        scanf("%d", &all.sex);
    }
    
    void inqueue(person all[], queue &man, queue &woman,int n) {//根據性別分別如男隊和女隊
        for (int i = 0; i < n; i++) {
            if (all[i].sex == 1) {
                //strcpy(man.elem[man.number], all[i].name);
                strcpy(man.elem[man.rear], all[i].name);
                man.rear = (man.rear + 1) % 100;
                man.number++;
            }
            else {
                //strcpy(woman.elem[woman.number], all[i].name);
                strcpy(woman.elem[woman.rear], all[i].name);
                woman.rear = (woman.rear + 1) % 100;
                woman.number++;
            }
        }
    }
    
    status initqueue(queue &man) {
    
        /*int n,i;
        cout<<"請輸入隊中的人員數量:";
        cin>>n;
        man.number = n + 1;
        cout<<"輸入隊中人員的姓名";
        for(i = 0;i < n;i ++){
            scanf("%s",&man.elem[i]);
        }
        man.rear = n;
        */
        man.rear = man.front = 0;
        man.number = 0;
        return 0;
    }
    int emptyqueue(queue man) {//用於判斷隊列中還有沒有人
        if (man.front == man.rear)
            return 0;
        else
            return 1;
    }
    int dequeue(queue &man, char *str) {//刪除隊首元素
        if (man.front == man.rear)
            return 0;
        else {
            strcpy(str, man.elem[man.front]);
            man.front = (man.front + 1) % 100;
            man.number--;
            return 1;
        }
    }
    
    
    int main() {
        person all[100];
        int n;//總人數
        queue man;
        queue woman;
        initqueue(man);
        initqueue(woman);//初始化兩個隊列,使兩個隊列的首和尾都為零
        cout << "請輸入本班的人數    :";
        cin >> n;
        for (int i = 0; i < n; i++) {//把所有人都存入一個隊列
            inperson(all[i]);
        }
    
        //根據性別入隊列
    
        inqueue(all, man, woman,n);//按性別分別入隊
    
        char str[20];
        while (emptyqueue(man) && emptyqueue(woman)) {//配對,改這裡沒有想好停止條件,我本來寫的是“||”應該是當兩個都不為空時才停止
            dequeue(man, str);
            dequeue(woman, str);
        }
        if (man.front == man.rear&&woman.front == woman.rear) {
            cout << "完全配對";
            cout << endl;
        }
        else if (woman.front != woman.rear) {
            cout << "下一位配對的女性是:";
            printf("%s", woman.elem[woman.front]);
            cout << endl;
        }
        else
            printf("下一位配對的男性是:%s", man.elem[man.front]);
        Sleep(50000);
        return 0;
    
        
    }

    給自己提個醒吧,重視基礎,出來混總是要還的,所以還是好好學習,打牢自己的基礎吧

 

 

 

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前幾天記錄了一下表單生成器(Form Builder)之表單數據存儲結構mongodb篇,之後便想著偽造一些數據。為什麼要偽造數據呢?說來慚愧,因為拖拉拽設計表單以及表單對應的列表的PC端和移動端該顯示哪些欄位並且是否支持搜索列印(即表單的列表配置)等一系列配置都還沒有做,還有就是前面只說了表單相關 ...
  • 在學習ssh時,一定有不少人對公鑰和私鑰產生過不解。在搜索公鑰跟私鑰的理解時,發現了這篇有趣的圖解小文章,與大家共用。 1. 鮑勃有兩把鑰匙,一把是公鑰,另一把是私鑰。 2. 鮑勃把公鑰送給他的朋友們 帕蒂、道格、蘇珊 每人一把。 3. 蘇珊要給鮑勃寫一封保密的信。她寫完後用鮑勃的公鑰加密,就可以達 ...
  • 最近寫一個需求時遇到一個問題,用戶需要通過點擊一個按鈕直接讀取他自己電腦上D盤的一個txt文件內容顯示到頁面,因為項目現在是用ZK寫的.我對於ZK也是剛剛瞭解不就,很多都還不是很熟.起初我是想用io流去讀取,然後寫完發現,這樣每次讀取的都是伺服器上的D盤下的txt文件,所以在網上找了很久.很多都是獲 ...
  • 場景 Ubuntu Server 16.04 LTS上怎樣安裝下載安裝Nginx並啟動: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/102828075 Nginx的配置文件位置以及組成部分結構講解: https://blog. ...
  • 文章主人公:小明,就職於某互聯網公司,從事後端開發工作。最近小明收到通知公司需要開發一款《證件照》應用,需要徵集架構方案,主要功能包括: 小明雖然從事後端開發工作,但是一直很關註架構這方面的知識,以往都是開發大佬們架構好的應用現在有機會自己去實踐下,打算把自己學到的知識應用於實際案例中來。 小明的腦 ...
  • Python win32com模塊 合併文件夾內多個docx文件為一個docx #!/usr/bin/env python # -*- coding: utf-8 -*- from win32com.client import Dispatch import os,sys #import panda ...
  • set介面 java.util.Set 介面和 java.util.List 介面一樣,同樣繼承自 Collection 介面,它與 Collection 介面中的方 法基本一致,但是set介面中元素無序,並且不重覆 分類 1.HashSet集合 2.LinkedHashSet集合 HashSet集 ...
  • day one 演算法是充分利用解題環境所提供的基本操作,對輸入數據進行 逐步加工、變換和處理,從而達到解決問題的目的。 電腦的基本功能操作包括以下四個方面: 邏輯運算:與、或、非; 算術運算:加、減、乘、除; 數據比較:大於、小於、等於、不等於、大於等於、小於等於; 數據傳送:輸入、輸出、賦值。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...