华为模拟机试_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跳过此次循环