華為模擬機試_C++題解


華為模擬機試

[編程|100分] a+b

題目描述

計算a+b的和

每行包含兩個整數a和b

對於每行輸入對應輸出一行a和b的和

輸入

1 5

輸出

6

自解

#include<iostream>
using namespace std;
int main()
{
    int a, b;
    while(cin >> a >> b){
        cout << a + b << endl;
    }
}
  • ⭐cin流本身有返回值,讀取成功為true,失敗為false
  • 考慮使用EOF
    • EOF是end of file的縮寫,表示”文字流”(stream)的結尾。這里的”文字流”,可以是文件(file),也可以是標准輸入(stdin)。
    • EOF不是特殊字符,而是一個定義在頭文件stdio.h的常量,一般等於-1。#define EOF (-1)
    • 除了表示文件結尾,EOF還可以表示標准輸入的結尾。但是,標准輸入與文件不一樣,無法事先知道輸入的長度,必須手動輸入一個字符,表示到達EOF。

    參考:C++——EOF是個什么東西?

[編程|200分] 0交換排序

題目描述

長度為n的數組亂序存放着0至n-1.現在只能進行0與其他數的交換,完成以下函數

自解

/**
 * 交換數組里n和0的位置
 * array: 存儲[0-n)的數組
 * len: 數組長度
 * n: 數組里要和0交換的數
 */
extern void swap_with_zero(int* array, int len, int n);

class Solution {
public:
    /**
     * 調用方法swap_with_zero來對array進行排序
     */
    void sort(int* array, int len) {
        for (int i = 0; i < len; i++){
            swap_with_zero(array, len, array[i]);
            swap_with_zero(array, len, i);
        }
    }
};

思路

排序后應當每個位置的值與索引一致,所以應當先將0交換到此位置值對應的位置,再將此位置值與0交換,可將值放到對應位置

參考NOWCODER

/**
 * 交換數組里n和0的位置
 * array: 存儲[0-n)的數組
 * len: 數組長度
 * n: 數組里要和0交換的數
 */
extern void swap_with_zero(int* array, int len, int n);

class Solution {
public:
    /**
     * 調用方法swap_with_zero來對array進行排序
     */
    void sort(int* array, int len) {
        for (int i = 0; i < len; i++){
            if (array[i] == i)
                continue;
            swap_with_zero(array, len, array[i]);
            swap_with_zero(array, len, i);
        }
    }
};

添加判斷,如果此位置的值已經是正確的,那么可以利用continue跳過此次循環


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM