1. 求n的阶乘
int function(int number) {
int result = 1;
if (number <= 1)
return result;
result = number * function(number - 1);
}
int main()
{
int a = 0;
cin >> a;
cout << function(a) << endl;
return 0;
}
2. 堆排序
void HeapAdjust(int *data, int s, int len) {
int temp = *(data + s);
for (int j = 2 * s; j < len; j *= 2) {
if (j < len && *(data + j) < *(data + j + 1)) {
j++;
}
if (temp > *(data + j)) {
break;
}
*(data + s) = *(data + j);
s = j;
}
*(data + s) = temp;
}
void swap(int *data, int a, int b) {
int temp = 0;
temp = *(data + a);
*(data + a) = *(data + b);
*(data + b) = temp;
}
int main() {
int data[8] = { 4,2,3,7,8,1,11,5 };
int len = 8;
for (int i = (len - 1) / 2; i >= 0; i--) {
HeapAdjust(data, i, len);
}
for (int i = len - 1; i >= 1; i--) {
swap(data, 0, i);
HeapAdjust(data, 0, i - 1);
}
for (int i = 0; i < len; i++) {
cout << data[i] <<endl;
}
return 0;
}
3. 快速排序
void swap(int *data, int a, int b) {
int temp = 0;
temp = *(data + a);
*(data + a) = *(data + b);
*(data + b) = temp;
}
int Partition(int *data, int low, int high) {
int temp = *(data + low);
while (low < high) {
while (low < high && *(data + high) >= temp) {
high--;
}
swap(data, low, high);
while (low < high && *(data + low) <= temp) {
low++;
}
swap(data, low, high);
}
return low;
}
void QuickSort(int *data, int low, int high) {
int partition_value = 0;
if (low < high) {
partition_value = Partition(data, low, high);
QuickSort(data, low, partition_value - 1);
QuickSort(data, partition_value + 1, high);
}
}
4. 折半查找
int BinarySearch(int *data, int len, int key) {
int mid = 0;
int low = 0;
int high = len - 1;
while (low <= high) {
mid = (low + high) / 2;
if (*(data + mid) < key) {
low = mid + 1;
}
else if (*(data + mid) > key) {
high = mid - 1;
}
else {
return mid;
}
}
return 0;
}
int main() {
int num[] = { 2,4,6,8,9,12,34 };
cout << BinarySearch(num, 7, 2) << endl;
}
5. 二进制数有多少个1
int main() {
unsigned int num = 60;
int count = 0;
while (num != 0) {
if (num % 2 == 1) {
count++;
}
num /= 2;
}
cout << count << endl;
return 0;
}
6. 最大公约数
int gcd(int x, int y) {
if (y == 0) {
return x;
}
else {
gcd(y, x%y);
}
}
int main() {
int x = 0, y = 0;
cin >> x >> y;
cout << gcd(x, y) << endl;
return 0;
}
7. 计算字符串的熵
int main() {
#define MAXLENGTH 200
char input[MAXLENGTH] = { 0 };
char c = getchar();
int count = 0;
int input_len = 0;
while (c != '\n') {
input[count] = c;
c = getchar();
count++;
}
input_len = count;
char input_spec[MAXLENGTH] = { 0 };
int input_spec_len[MAXLENGTH] = { 0 };
int spec_len = 0;
input_spec[0] = input[0];
input_spec_len[0] = 1;
spec_len = 1;
for (int i = 1; i < input_len; i++) {
for (int j = 0; j < spec_len; j++) {
if (input[i] == input_spec[j]) {
input_spec_len[j]++;
break;
}
if (input[i] != input_spec[j] && j == spec_len - 1) {
input_spec[spec_len] = input[i];
input_spec_len[spec_len]++;
spec_len++;
break;
}
}
}
double div_pro = 0;
for (int i = 0; i < spec_len; i++) {
double pro = (double)(input_spec_len[i]) / (double)(input_len);
div_pro += (-1)*pro * log2(pro);
}
//cout << div_pro << endl;
printf("%lf", div_pro);
return 0;
}