1,二分查找
#include <stdio.h>
int binarysearch(int a[], int n, int k) {
if (n == 1)return a[0] == k;
int mid = n / 2;
if (a[mid] == k)return 1;
else if (a[mid] > k)return binarysearch(a/*起始位置*/, mid/*结束位置*/, k);
else return binarysearch(a + mid + 1/*起始位置*/, n - mid - 1/*结束位置*/, k);
}
int main() {
int a[] = { 0,1,2,3,4,5,6,7,8,9 };
int n = sizeof(a)/sizeof(a[0]);
int k;
scanf("%d", &k);
if (binarysearch(a, n, k))printf("yes");
else printf("no");
return 0;
}
2,将字符串中的数字累乘
#include "stdio.h"
int del(char a[]) {
if (a[0] == '\0')return 1;
int i = 1;
if (a[0] >= '0' && a[0] <= '9')i = a[0] - '0';
return i * del(a + 1);
}
int main() {
char a[] = { "1 ji 2 lin 3 university 4 china 5" };
printf("%d", del(a));
return 0;
}
3,输出最大字符串
#include <stdio.h>
int str_cmp(char* p, char* q) {
int len1 = 0, len2 = 0;
while (*p++ != '\0')len1++;
while (*q++ != '\0')len2++;
return len1 > len2;
}
char* max(char* st[], int n) {
if (n == 1)return st[0];
else {
if (str_cmp(*st,max(st + 1, n - 1)))return *st;
else return max(st + 1, n - 1);
}
}
int main() {
char a[10][10];
char* st[10];
int n;
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%s", a[i]);
st[i] = a[i];
}
printf("%s", max(st,n));
}
4,函数类
#include <stdio.h>
int g(int n, int x) {
if (n == 0)return 0;
else if (n == 1)return x + 1;
return g(n - 2, x - 1) + 2 * g(n - 1, x);
}
int main() {
int n;
int x;
scanf("%d%d", &n, &x);
printf("%d", g(n, x));
return 0;
}
5,折木头,46分,小于等于5不分
#include <stdio.h>
double ac(double n) {
if (n <= 5.0) {
return 1;
}
else return ac(n * 2.0 / 5.0) + ac(n * 3.0 / 5.0);
}
int main() {
double n;
scanf("%lf", &n);
printf("%d", (int)ac(n));
return 0;
}
6,组合数
int cmn(int m, int n) {
if (m < n || m < 0 || n < 0)return 0;
else if (m == n || n == 0)return 1;
else if (n == 1)return m;
return cmn(m - 1, n) + cmn(m - 1, n - 1);
}
7,(2x+3y)^n的第k项
#include <stdio.h>
int find(int n, int k) {
if(n==k&&k==0)return 1;
else if (k == 0)return 2*find(n-1,k);
else if (n == k)return 3*find(n-1,k-1);
return 2 * find(n - 1, k) + 3 * find(n - 1, k - 1);
}
int main() {
int k, n;
scanf("%d%d", &n, &k);
printf("%d", find(n, k));
}
8,计算位数和
#include <stdio.h>
int wsh(int n) {
if (n == 0)return 0;
return n % 10 + wsh(n / 10);
}
int main() {
int n;
scanf("%d", &n);
printf("%d", wsh(n));
return 0;
}
9,最小值
int min_data(int* p, int n) {
if (n == 1)return *p;
else {
if (*p < min_data(p + 1, n - 1))return *p;
return min_data(p + 1, n - 1);
}
}
10,数组元素和
int sum(int a[], int n) {
if (n == 1)return a[0];
return a[n - 1] + sum(a, n - 1);
}
11,求二进制
#include <stdio.h>
void solve(int n) {
if (n == 0)return;
solve(n / 2);
printf("%d", n % 2);
}
int main() {
int n;
scanf("%d", &n);
solve(n);
return 0;
}