问题描述:
将一个字符用转换成16进制表示
代码:
string toHex(int ch) {
char ch1 = ch / 0x10 + '0';
if (ch1 > '9') {
ch1 = 'A' - 1 + (ch1 - '9');
}
char ch2 = ch % 0x10 + '0';
if (ch2 > '9') {
ch2 = 'A' - 1 + (ch2 - '9');
}
string s({ ch1, ch2 });
return s;
}
问题描述:
用宏定义求两个数中的较小值
代码:
#include <iostream>
using namespace std;
#define MIN(a, b) (a<b) ? a : b;
int main() {
int i = MIN(5, 3);
cout << i << endl;
return 0;
}
问题描述:
定义一个函数,用于交换两个变量的值。
代码:
void swap(int &a, int &b) {
int temp = a;
a = b;
b = temp;
}
int main() {
int a = 5, b = 7;
cout << a << " " << b << endl;
swap(a, b);
cout << a << " " << b << endl;
return 0;
}
问题描述:
求1到100之间的所有质数的和
代码:
bool isPrimeNumber(int n) {
int k = n / 2;
bool flag = true;
if (n <= 1)
return false;
for (int i = 2; i <= k; i++) {
if (n%i == 0) {
flag = false;
break;
}
}
return flag;
}
int primeNumberSum() {
int sum = 0;
isPrimeNumber(1);
for (int i = 1; i <= 100; i++) {
if (isPrimeNumber(i)) {
sum += i;
}
}
return sum;
}
问题描述:
有一个单向链表的结点结构如下描述,删除这个单链表(表头不含元素)中倒数第n个结点,并返回指向删除结点的指针。
解题分析:
一看到这个问题可能很多人会想到这样的解决方案(我自己一开始做也是这样想的):遍历一遍所有的元素,统计其总元素的大小size,然后再使结点指针从头指针开始往后移size-n+1,即指向要删除的元素,把该元素删除并返回该指针。没错,这是第一种解决方案,但这种方案不太好。它要遍历两遍,如果元素很多,要把所有元素从硬盘中读到内存,会则很耗时。这种方案不行,那就得另起思路,也就是下面要讲的第二种方案。
首先,单链表有一个特点:末尾结点的next值为空。利用这一特点可以判断结点是否为末尾结点,定义两个指针p1,p2,一开始都批向head,再 p2往后移n个结点,然后p1,p2一起往后移动,直到p2指向末尾结点,则p1指向的结点即为要删除的结点。执行过程如下图
代码:
struct SNode {
int value;
SNode *next;
SNode(int v = 0) :value(v), next(nullptr) {
}
};
void insert(SNode *head, int v) {
SNode *p = head;
while(p->next != nullptr) {
p = p->next;
}
SNode *node = new SNode(v);
p->next = node;
}
SNode *deleteLast(SNode *head, int n) {
SNode *p, *q;
p = q = head;
if (p == nullptr || p->next == nullptr)
return nullptr;
int count = 0;
while (count < n && q != nullptr) {
count++;
q = q->next;
}
if (count < n)
return nullptr;
SNode * p2 = head;
while (q->next != nullptr) {
q = q->next;
p2 = p;
p = p->next;
}
p2->next = p->next;
return p;
}
void testSNode() {
SNode head;
insert(&head, 1);
insert(&head, 2);
insert(&head, 3);
insert(&head, 4);
SNode *node = deleteLast(&head, 2);
cout << node->value << endl;
}