C++ 竞赛编程技巧


在这里,我们将了解一些 C++ 编程语言的实用技巧,这些技巧可以帮助我们在不同的领域。例如,如果我们想参加一些竞赛编程活动,那么这些技巧将有助于我们减少编写代码的时间。让我们逐一看看其中的一些例子。

无需使用 % 运算符即可检查数字是奇数还是偶数。这个技巧很简单。我们可以对数字和 1 执行按位与运算。如果结果非零,则为奇数,否则为偶数。逻辑非常简单。所有奇数在最低有效位 (LSb) 上都有 1。因此,在与 1 执行 AND 运算后,它将屏蔽除 LSb 之外的所有字符,因此我们可以轻松获得所需的结果。

if ((n & 1) != 0){
   //this is odd
} else {
   //This is even
}

使用移位运算符进行快速乘法和除法。如果我们想将一个数字乘以 2n,那么我们可以简单地将该数字向左移动 n 次。类似地,如果我们想将一个数字除以 2n,则将该数字向右移动 n 次。

x = 40;
y = x << 2; //x will be multiplied with 4, so y = 160
cout << x;
x = 40;
y = x >> 2; //x will be divided by 4, so y = 10
cout << x;

我们可以无需使用第三个变量即可交换两个数字。这可以通过使用 + 和 - 运算符来完成。但我们也可以使用按位异或运算符来完成。您可以手动检查数字以确保。

//swap x and y
x ^= y;
y ^= x;
x ^= y;

有时有一些约束条件,我们不能在代码中使用 strlen() 函数。在这种情况下,我们创建自己的 strlen() 函数。如果情况只是访问字符,那么我们实际上不需要这样做。我们可以检查位置 i 处的字符是否有效(非零)。如果非零,我们可以遍历,否则停止。

for(int i = 0; s[i]; i++) {
   cout << s[i];
}

大多数情况下,我们在 STL 中使用 push_back() 函数在某些容器(如向量等)中添加新元素。无需使用它,我们也可以使用 emplace_back()。此函数速度更快。它不会在其他地方分配内存,而是将分配的内存附加到容器中。

C++ 提供内置的 GCD 函数。我们可以在不同的情况下使用它们。语法如下所示。

__gcd(x, y) //find GCD of x and y

主函数中数组的最大大小约为 10^6。但是,如果数组在全局范围内声明,则我们可以将大小声明为 10^7。

我们可以使用对数运算来计算任何数字的最高有效位。请参阅以下逻辑以了解思路。

n = 4578;
double k = log10(n);
k = k – floor(k);
int x = pow(10, k); //x is the most significant digit

使用对数运算直接计算数字位数。我们不为此使用任何循环。

n = 4578;
int digit_count = floot(log10(n)) + 1

我们可以使用此逻辑直接检查数字是否为 2 的幂。

x = 1024;
bool check = x && (!(x & (x-1))); //if this is true, then power of two.

C++ 中有一些内置算法可以检查以下条件。

all_of(left, left + n, isPositive()); //check all are positive or not
any_of(left, left + n, isPositive()); //check at least one positive or not.
none_of(left, left + n, isPositive()); //check no elements are positive

复制函数用于将元素从一个容器复制到另一个容器。

int src[5] = {10, 20, 30, 40, 50};
int des[5];
copy_n(src, 5, dest);

有一个名为 itoa() 的算法。此算法可用于创建一系列连续递增的值,就像将初始值分配给 *first,然后使用后增量运算符使用该值一样。

int arr[5] = {0};
char str[5] = {0};
itoa(arr, arr+5, 15); //it will generate {15, 16, 17, 18, 19}
itoa(str, str+5, ‘A’); //it will generate {‘A’, ‘B’, ‘C’, ‘D’, ‘E’}

以二进制形式赋值。我们可以使用 0b 前缀加上一些二进制数字来表示该数字以二进制形式提供。

int x = 0b1101; //then x will hold 13

在 C++ 中,我们可以使用关键字而不使用条件运算符。例如,关键字“and”可以代替“&”。

x = 10;
if(x < 10 and x > 5)
   cout << “True” << endl;
else
   cout << “False” << endl;
   //This will return True

更新于:2019-07-30

357 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告