筛选列举质数
#include <cstdio>
int main() {
int n = 15;
int mark[16] = {
1, 1, 0, 0,
0, 0, 0, 0,
0, 0, 0, 0,
0, 0, 0, 0
};
int c;
int j;
for (c = 2; c * c <= n; c++) {
if ( mark[c] != 1){
for ( j = 2; j <= n/c; j++){
mark[c*j] = 1;
}
}
}
for ( c = 2; c <= n; c++){
if ( mark[c] != 1) {
printf("%d\n", c);
}
}
return 0;
}
指定范围的质数
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
int n = 1000000;
int mark[1000001];
int main() {
memset(mark, 0, sizeof(mark));
mark[0] = 1;
mark[1] = 1;
int c;
for (c = 2; c * c <= n; c++) {
if (mark[c] != 1) {
for (int j = 2; j <= n/c; j++) {
mark[c * j] = 1;
}
}
}
int N,M;
while (cin >> N >> M) {
for (c = M; c <= N; ++c) {
if (mark[c] != 1) {
cout << c << endl;
}
}
}
return 0;
}
线性查找
#include <cstdio>
#include <cmath>
void find_nine(int numbers[]) {
int i;
for (i = 0; i < 15; i++){
if (numbers[i] == 9){
printf("%d\n",i);
return;
}
}
printf("null");
}
int main() {
int numbers[15];
int i;
for (i = 0; i < 15; i++) {
scanf("%d", &numbers[i]);
}
find_nine(numbers);
return 0;
}
折半查找
伪代码:
function BinarySearch(List, key)
left = 0, right = List.length - 1
while left <= right
mid = (left + right) / 2
if List[mid] is key
return mid
if List[mid] < key
left = mid + 1
else
right = mid - 1
return -1
#include <cstdio>
#include <iostream>
using namespace std;
int main() {
int n;
int k;
int numbers[1000001];
int m;
int i;
// 反复读入数字和查找数字的数量
while (scanf("%d %d", &n, &k) != EOF) {
// 读入给定的数字
for (i = 0; i < n; i++) {
scanf("%d", &numbers[i]);
}
for (int j = 0; j < k; j++) {
// 读入待查找的数字,
scanf("%d", &m);
// 请在下面完成查找读入数字的功能
int left = 0, right = n - 1;
int mid;
while (left <= right) {
mid = (left + right) / 2;
if (numbers[mid] == m && j == 0) {
cout << mid + 1 ;
break;
}
if (numbers[mid] == m && j != 0) {
cout << " " << mid + 1 ;
break;
}
if (numbers[mid] > m) {
right = mid - 1;
}
else {
left = mid + 1;
}
}
if (left > right && j == 0) {
cout << "0" ;
}
if (left > right && j != 0) {
cout << " " << "0" ;
}
}
}
return 0;
}
递推数组
斐波拉契数列
炊饼问题
#include <cstdio>
int main() {
int x = 100;
int i;
int part[101];
part[0] = 1;
for (i = 1; i <= x; i++) {
part[i] = part[i - 1] + i;
}
printf("There are %d parts after 100 cuts\n", part[x]);
return 0;
}
爬楼梯
#include <cstdio>
#include <iostream>
using namespace std;
int main() {
int n;
int step[50];
step[0] = 0, step[1] = 1, step[2] = 1;
for(int i = 3; i <= 49; ++i){
step[i] = step[i - 2] + step[i - 3];
}
// 反复读入数字和查找数字的数量
while (scanf("%d", &n) != EOF) {
// 读入给定的数字
printf("%d\n",step[n - 1]);
}
return 0;
}
冒泡排序与选择排序
//BubbleSort
#include <cstdio>
int main() {
int n = 10;
int m;
int num[10];
int i;
// 读入给定的数字
for (i = 0; i < n; i++) {
scanf("%d", &num[i]);
}
for (int j = 0; j < 9; j++) {
for (i = 0; i < 9 - j; i++) {
if(num[i] < num[i + 1]){
int k = num[i];
num[i] = num[i + 1];
num[i + 1] = k;
}
}
}
for(int i = 0; i < 9; ++i){
printf("%d ",num[i]);
}
printf("%d",num[9]);
return 0;
}
//SelectSort
#include <cstdio>
int main() {
int n = 10;
int num[10];
// 读入给定的数字
for (int i = 0; i < n; i++) {
scanf("%d", &num[i]);
}
for (int i = 0; i < 9; i++) {
int m = num[i];
int k = i;
for (int j = i + 1 ; j < 10; j++) {
if(num[j] > m){
m = num[j];
k = j;
}
}
num[k] = num[i];
num[i] = m;
}
for(int i = 0; i < 9; ++i){
printf("%d ",num[i]);
}
printf("%d",num[9]);
return 0;
}