c语言算法
一些简单的算法
努力学习中………
这个作者很懒,什么都没留下…
展开
-
C语言背包问题
0/1背包问题一个旅行者有一个最多能装MM公斤的背包,现在有nn件物品,它们的重量分别是W1,W2,...,WnW1,W2,...,Wn,它们的价值分别为C1,C2,...,CnC1,C2,...,Cn,求旅行者能获得最大总价值。【输入】第一行:两个整数,MM(背包容量,M<=200M<=200)和NN(物品数量,N<=30N<=30);第2..N+12..N+1行:每行二个整数Wi,CiWi,Ci,表示每个物品的重量和价值。【输出】仅一行...原创 2022-01-26 12:57:20 · 1645 阅读 · 0 评论 -
C语言全排列
输入:3输出:123132213231312321#include<stdio.h>int n;int used[20], result[20];void perm(int m){ int i; if (n == m) { for (i = 0; i < n; i++) { printf("%d", result[i]); } printf("\n"); } else { for (i = 0; i &l.原创 2022-01-25 19:02:08 · 197 阅读 · 0 评论 -
C语言大整数加减乘除余
加法#include<stdio.h>#include<string.h>int main(){ char a[200], b[200]; int c[200], d[200]; memset(a, 0, sizeof(a)); memset(b, 0, sizeof(b)); memset(c, 0, sizeof(c)); memset(d, 0, sizeof(d)); scanf("%s", a); scanf("%s", b); int l.原创 2022-01-24 14:22:28 · 554 阅读 · 0 评论 -
C语言归并排序
#include<stdio.h>int temp[100000];int a[100000];void guibing2(int low, int mid, int high){ int i, j, p; for (i = low, j = mid, p = low; i < mid && j <= high; p++) { if (a[i] < a[j]) { temp[p] = a[i++]; } else { .原创 2022-01-22 23:47:34 · 356 阅读 · 0 评论 -
C语言青蛙跳台阶
普通版青蛙跳台阶题目:有n级台阶,一只青蛙每次可以跳一阶或两阶,问青蛙从0阶跳到n阶有多少种跳法原理:当n=0;f(0)=0;当n=1;f(1)=1;当n=2; f(2)=2;当n>=3;f(n)=f(n-1)+f(n-2);#include<stdio.h>int main(){ int n; scanf("%d", &n); int dp[1000]; dp[0] = 0; dp[1] = 1; dp[2] = 2; in..原创 2022-01-20 14:20:46 · 699 阅读 · 0 评论 -
C语言杨辉三角
第一种:输入4输出11 11 2 11 3 3 1#include<stdio.h>int main(){ int n; scanf("%d", &n); int a[100][100]; for (int i = 0; i < n; i++) { a[i][0] = 1; a[i][i] = 1; } for (int i = 2; i < n; i++) { for (int j = 1; j < .原创 2022-01-13 15:20:13 · 99 阅读 · 0 评论 -
C语言二分查找
输入115 13 19 21 37 56 64 75 80 88 9256输出(如果查找不到输出”查找失败“)5#include<stdio.h>void find(int a[], int n, int num){ int left = 0; int right = n - 1; int mid; while (left < right) { mid = (left + right) / 2; if (a[mid] > num) .原创 2022-01-13 14:16:45 · 111 阅读 · 0 评论 -
C语言约瑟夫环
输入10 3输出4#include<stdio.h>int ysf(int n, int m, int i){ if (i == 1) return (n + m - 1) % n; else return (ysf(n - 1, m, i - 1) + m) % n;}int main(){ int n, m; scanf("%d%d", &n, &m); int i = n; printf("%d\n", ysf(n, m, .原创 2022-01-12 20:40:44 · 123 阅读 · 0 评论 -
C语言快速排序
#include<stdio.h>void quicksort(int a[], int L, int R){ if (L >= R) { return; } int left = L, Right = R; int dd=a[left]; while (left < Right) { while (left<Right && a[Right]>=dd) { Right--; } if (left < R.原创 2022-01-12 12:01:22 · 55 阅读 · 0 评论 -
C语言判断素数
输入:14输出:1不是素数4不是素数方法一:#include<stdio.h>int main(){ int n; scanf("%d", &n); int i; int flag = 1; for (i = 2; i < n; i++) { if (n % i == 0) { flag = 0; break; } } if (n == 1||flag==0) { printf("%d不是素数\n",n原创 2022-01-07 16:39:00 · 405 阅读 · 0 评论 -
C语言汉诺塔问题
#include<stdio.h>void move(char one, char two){ printf("%c----%c\n", one, two);}void hanoi(int n, char x, char y, char z){ if (n == 1) { move(x, z); } else { hanoi(n - 1, x, z, y); move(x, z); hanoi(n - 1, y, x, z); }}int main(.原创 2022-01-06 15:09:02 · 183 阅读 · 0 评论 -
C语言判断回文
输入:12321asdfdsafasdfgfg输出:yesyesno方法一:数字,字符串都通用#include<stdio.h>#include<string.h>int main(){ char s[1000],a[1000]; scanf("%s", s); int len = strlen(s); int i; int flag = 1; for (i = 0; i < len; i++) { a[i] =原创 2022-01-06 14:14:52 · 195 阅读 · 0 评论 -
C语言最小公倍数
方法一:递归#include<stdio.h>int digui(int a, int b){ if (b == 0) { return a; } else { return digui(b, a % b); }}int main(){ int a, b; scanf("%d%d", &a, &b); int ret = digui(a, b); printf("%d", (a*b)/ret); return 0;}方法二:非递原创 2022-01-06 13:12:38 · 299 阅读 · 0 评论 -
C语言最大公约数
方法一:非递归#include<stdio.h>int main(){ int a, b; scanf("%d%d", &a, &b); int sum; while (b != 0) { sum = a % b; a = b; b = sum; } printf("%d", a); return 0;}方法二:递归#include<stdio.h>int digui(int a, int b){ if (b =原创 2022-01-06 13:08:59 · 172 阅读 · 0 评论 -
C语言二进制转十进制
输入101输出5#include<stdio.h>#include<math.h>int main(){ char a[100]; int i; int count = 0; for (i = 0;; i++) { scanf("%c", &a[i]); if (a[i] == '\n') { break; } } int j; for (j = i-1; j >= 0; j--) { count +.原创 2022-01-05 22:46:42 · 257 阅读 · 0 评论 -
C语言十进制转八进制
输入12输出14#include<stdio.h>int main(){ int n; scanf("%d", &n); int i = 0; int a[100]; int count; while (1) { a[i] = n % 8; n = n / 8; if (n == 0) { break; } i++; } int j; for (j = i; j >= 0; j--) { printf(.原创 2022-01-05 22:14:06 · 14353 阅读 · 3 评论 -
C语言十进制转二进制
输入3输出11#include<stdio.h>int main(){ int n; scanf("%d", &n); int i = 0; int a[100]; int count; while (1) { a[i] = n % 2; n = n / 2; if (n == 0) { break; } i++; } int j; for (j = i; j >= 0; j--) { printf(".原创 2022-01-05 22:11:01 · 1183 阅读 · 0 评论 -
C语言十进制转十六进制
输入:123输出:7B#include<stdio.h>int main(){ int n; scanf("%d", &n); int a[100]; int count; int i = 0; while (1) { count = n % 16; a[i] = count; i++; n = n / 16; if (n == 0) { break; } } int j; for (j = i - 1;.原创 2022-01-05 21:51:54 · 1858 阅读 · 0 评论 -
C语言冒泡排序
输入:1050 36 41 19 23 4 20 18 12 22输出:4 12 18 19 20 22 23 36 41 50#include<stdio.h>int main(){ int n; scanf("%d", &n); int a[100]; int i, j; for (i = 0; i < n; i++) { scanf("%d", &a[i]); } for (i = 0; i < n - 1; i.原创 2022-01-05 16:39:21 · 128 阅读 · 0 评论 -
C语言希尔排序
输入:1050 36 41 19 23 4 20 18 12 22输出:4 12 18 19 20 22 23 36 41 50#include<stdio.h>int main(){ int n; scanf("%d", &n); int i; int a[100]; for (i = 0; i < n; i++) { scanf("%d", &a[i]); } int j, num, key; for (num = n.原创 2022-01-05 16:34:51 · 136 阅读 · 0 评论 -
C语言插入排序
输入:1050 36 41 19 23 4 20 18 12 22输出4 12 18 19 20 22 23 36 41 50#include<stdio.h>int main(){ int n; scanf("%d", &n); int a[100]; int i, j, tmp; for (i = 0; i < n; i++) { scanf("%d", &a[i]); } for (i = 1; i < n; i.原创 2022-01-05 16:27:44 · 53 阅读 · 0 评论