1 #include <fstream>
2 using namespace std;
3 /**
4 xzpx选择排序
5 思想:
6 ①a[1]-a[n]找到最小的放到a[1]中
7 ②a[2]-a[n]找到最小的放到a[2]中
8 n 循环①②时排除已找到的最小值,不再参与循环,直到最后两项比较完成。
9 */
10 ifstream cin("xzpxin.txt");
11 ofstream cout("xzpxout.txt");
12 int main(){
13 int n,temp,k;
14 cin >> n;
15 int a[n];
16 //输入
17 for(int i = 1;i <= n;i++){
18 cin >> a[i];
19 }
20 //算法
21 //49 38 65 97 76 13 27 49
22 for(int i = 1;i <= n;i++){//从第一项开始
23 k = i;//记录当前循环的那一项的位置
24 for(int j = i + 1;j <= n;j++){//从第二项开始比较
25 if(a[j] < a[k]){//如果后一项比当前最小的这一项还小,更新k值
26 k = j;
27 }
28 }
29 if(k != i){//已被更新过 ,则交换
30 temp = a[i];
31 a[i] = a[k];
32 a[k] = temp;
33 }
34 }
35 //输出
36 for(int i = 1;i <= n;i++){
37 cout << a[i] << " ";
38 }
39 return 0;
40 }
1 #include <iostream>
2 #include <cstdio>
3 #include <cmath>
4 #include <cstring>
5 using namespace std;
6 /**
7 高精度加法
8 123
9 456
10 8
11 49 38 65 97 76 13 27 49
12 min = a[1];
13 */
14 int main(){
15 char a1[100],b1[100];
16 //x进位数,j当前真正进行运算位数
17 int a[100],b[100],c[100],lena,lenb,i,x = 0,j = 1;
18 memset(a,0,sizeof(a));//加数
19 memset(b,0,sizeof(b));//被加数
20 memset(c,0,sizeof(c));//和
21 gets(a1);//获取第一行输入给a1数组
22 gets(b1);//获取第二行输入给b1数组
23 lena = strlen(a1);//a1数组的长度
24 lenb = strlen(b1);//b1数组的长度
25 //输入
26 for(i = 0;i <= lena - 1;i++){
27 a[lena - i] = a1[i] - 48;//加数放入a数组
28 }
29 for(int i = 0;i <= lenb - 1;i++){
30 b[lenb - i] = b1[i] - 48;//被加数放入b数组
31 }
32 //核心算法
33 while(j <= lena || j <= lenb){
34 c[j] = a[j] + b[j] + x;
35 x = c[j]/10;
36 c[j]%=10;
37 j++;
38 }
39 //输出
40 c[j] = x;
41 if(c[j] == 0){
42 j--;
43 }
44 for(i = j;i >= 1;i--){
45 cout << c[i];
46 }
47 cout << endl;
48 return 0;
49 }
1 #include <iostream>
2 #include <cstdio>
3 #include <cmath>
4 using namespace std;
5 /**
6 高精度加法
7 8 5 6
8 + 2 5 5
9 ①1
10 int c[100];
11 void add(int a[],int b[]){
12 int i = 1,x = 0;
13 while((i <= a.length()) || (i <= b.length())){
14 c[i] = a[i] + b[i] + x;
15 ①= x进位数 = (a[i] + b[i]) / 10
16 x = c[i]/10;//取进位的十位值
17 //当前运算位的值
18 c[i] = c[i]%10; //取当前运算位的末位值
19 i++;
20 }
21 for(int i = 1;i <= c.length;i++){
22 cout << c[i];
23 }
24 }
25 */
26
27 void add(int a[],int b[]){
28 int c[101];
29 int i = 1,x = 0;
30 while(i <= sizeof(a) || i <= sizeof(b)){
31 c[i] = a[i] + b[i] + x;
32 x = c[i] / 10;
33 c[i] %= 10;
34 i++;
35 }
36 cout << i << endl;
37 }
38
39 int main(){
40 int a[3] = {8,5,6};
41 int b[3] = {2,5,5};
42 add(a,b);
43 return 0;
44 }
1 #include <iostream>
2 #include <cstdio>
3 #include <cmath>
4 using namespace std;
5 /**
6 高精度算法
7 */
8 void init(int a[]){
9 string s;
10 cin >> s;
11 int len = s.length();
12 for(int i = 1;i <= len;i++){
13 a[i] = s[len - i] - '0';//遍历
14 cout << a[i] << " ";
15 }
16 }
17 int main(){
18 int a[10];
19 init(a);
20 return 0;
21 }
1 #include <fstream>
2 #include <cstring>
3 using namespace std;
4 /**
5 mppx冒泡排序
6 相邻两个人比较,高的留下,低的通过,一轮比完以后得到最大值
7 */
8 ifstream cin("mppxin.txt");
9 ofstream cout("mppxout.txt");
10 int main(){
11 int n,temp;
12 cin >> n;
13 int a[n];
14 //输入
15 memset(a,0,sizeof(a));
16 for(int i = 0;i < n;i++){
17 cin >> a[i];
18 }
19 //算法
20 for(int i = n - 1;i >= 1;i--){//进行n-1轮冒泡
21 for(int j = 0;j < i;j++){//进行i轮比较
22 if(a[j] > a[j + 1]){
23 temp = a[j];
24 a[j] = a[j + 1];
25 a[j + 1] = temp;
26 }
27 }
28 }
29 //输出
30 for(int i = 0;i < n;i++){
31 cout << a[i] << " ";
32 }
33 return 0;
34 }
1 #include <fstream>
2 #include <cstring>
3 using namespace std;
4 /**
5 mppx改进版冒泡排序
6 相邻两个人比较,高的留下,低的通过,一轮比完以后得到最大值
7 6
8 1 5 2 3 4 6
9
10 1 2 3 4 5 6
11 */
12 ifstream cin("mppx2in.txt");
13 ofstream cout("mppx2out.txt");
14 int main(){
15 int n;
16 bool ok;
17 cin >> n;
18 int a[n];
19 //输入
20 for(int i = 1;i <= n;i++){
21 cin >> a[i];
22 }
23 //算法
24 for(int i = n - 1;i >= 1;i--){
25 //标志位的值都为true
26 ok = true;
27 for(int j = 1;j <= i;j++){
28 if(a[j] > a[j + 1]){
29 swap(a[j],a[j + 1]);
30 ok = false;//说明已经交换过
31 }
32 }
33 if(ok){
34 break;//没有交换则退出
35 }
36 }
37 //输出
38 for(int i = 1;i <= n;i++){
39 cout << a[i] << " ";
40 }
41 return 0;
42 }
1 #include <fstream>
2 #include <cstring>
3 #include <cstdio>
4 using namespace std;
5 /**
6 搜索与回溯
7 */
8 int main(){
9 //框架
10 递归回溯法算法框架【一】
11 int search(int k){
12 for(i = 1;i <= 算符种数;i++)
13 if(满足条件)
14 {
15 保存
16 if(到目的地)输出解;
17 else search(k + 1);下一条出路继续搜索
18 恢复:保存结果之前的状态{回溯一步}
19
20 }
21 }
22 return 0;
23 }
1 #include <fstream>
2 #include <cstring>
3 #include <cstdio>
4 #include <cmath>
5 #include <cstdlib>
6 using namespace std;
7 /**
8 素数环:从1到20这20个数摆成一个环,要求相邻两个数的和是一个素数。
9 【算法流程】
10 1).数据初始化
11 2).递归填数:判断第i个数填入是否合法
12 3).如果合法:填数;判断是否达到目标出口(20已填完):是:打印结果;
13 不是,递归填下一个;
14 4). 如果不合法:选择下一种可能
15 */
16 //1).数据初始化
17 ofstream cout("sushuout.txt");
18 bool b[21] = {0};
19 int total = 0,a[21] = {0};
20 int search(int);
21 int print();
22 bool pd(int,int);
23 int main(){
24 search(1);
25 cout << total << endl;//输出总的方案数
26 return 0;
27 }
28 /*
29 搜索算法
30 */
31 int search(int t){
32 for(int i = 1;i <= 20;i++){
33 if(pd(a[t-1],i) && (!b[i])){//判断与前一个数是否构成素数,以及该数是否可用
34 a[t] = i;
35 b[i] = 1;//已经用过了
36 if(t == 20){//路已经走完需要停止
37 if(pd(a[20],a[1])){
38 print();//打印
39 //break;
40 }
41 }else{
42 search(t + 1);//回溯继续搜索下一个方向
43 }
44 b[i] = 0;//不满足则标志该数可以继续使用
45 }
46 }
47 }
48 /*
49 输出的函数
50 */
51 int print(){
52 total++;
53 cout << "<" << total << ">";
54 for(int j = 1;j <= 20;j++){
55 cout << a[j] << " ";
56 }
57 cout << endl;
58 }
59 /*
60 传入两个整数,判断两个数的和是否是一个质数
61 */
62 bool pd(int x,int y){
63 int k = 2,i = x + y;
64 while(k <= sqrt(i) && i % k != 0){//循环找素数
65 k++;
66 }
67 if(k > sqrt(i)){
68 return 1;//是素数
69 }else{
70 return 0;//不是素数
71 }
72 }